Este artículo describe el algoritmo de cifrado y descifrado RSA implementado en Java. Compártelo para su referencia, como sigue:
import java.awt.alphacomposis; import java.awt.color; import java.awt.font; import java.awt.graphics2d; import java.awt.image; import java.awt.renderinghints; import java.awt.image.bufferedimage; import java.io.file; importar; importar; importación; java.io.fileInputStream; import java.io.fileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectutputStream; import java.security.key; import java.security.keypair; importar java.security.keyPairGenerator; import java.security.seCurity.sEscurity.SeCurerysEscurity. java.security.interfaces.rsaprivatekey; import java.security.interfaces.rsapublickey; import javax.crrypto.cipher; public class rsautils {public static string MakeKeyFile (String PubKeyFile, String prikeyfile) {String Result = "creación de archivos públicos y privados fallidos"; Pruebe {// KeyPairGenerator se utiliza para generar pares de claves públicas y privadas, y el objeto se genera en función del algoritmo RSA. KeyPairGenerator gen = keyPairGenerator.getInstance ("RSA"); // Inicializar el generador de pares de teclas, el tamaño de la clave es 1024 bits gen.initialize (1024); // // Generar un número aleatorio fuerte // Secureandom Random = new SecureRandom (); // gen.initialize (1024, aleatorio); // Generar un par de claves y guárdelo en el par de pares de par = gen.generateKeypair (); // Obtenga la clave privada rsaprivateKey prikey = (rsaprivatekey) par.getPrivate (); // Obtener la clave pública rsapublickey pubKey = (rsapublickey) par.getPublic (); // Generar el archivo de clave privada ObjectOutputStream OS = new ObjectOutputStream (nuevo FileOutputStream (PrikEyFile)); OS.WriteObject (Prikey); OS.Flush (); os.close (); // Generar archivo de clave pública OS = nuevo ObjectOutputStream (nuevo FileOutputStream (PubKeyFile)); OS.WriteObject (PubKey); OS.Flush (); os.close (); resultado = "Generar el archivo de clave pública ["+PubKeyFile+"] Generar archivo de clave privada ["+PrikeyFile+"]"; } catch (Exception e) {E.PrintStackTrace (); } resultado de retorno; } public static void main (string [] args) {try {string pubfile = "f: /images/pub.key"; Licencia de cadena = "f: /images/pri.key"; Resultado de cadena = nulo; // resultado = MakeyFile (PubFile, Licencia); resultado = MarkPupra (PubFile, Licencia); System.out.println (resultado); } catch (Exception e) {E.PrintStackTrace (); }} public static string markPupra (String PubFile, String License) {String Results = "Ocurrió el error de cifrado"; intente {ObjectInputStream OS = new ObjectInputStream (nuevo FileInputStream (PUBFile)); Rsapublickey pubKey = (rsapublickey) os.readObject (); os.close (); os = new ObjectInputStream (new FileInputStream (PRIFILE)); Rsaprivatekey prikeY = (rsaprivatekey) os.readObject (); os.close (); Cadena utf = "utf-8"; Cadena msg = "## China % de % personas @+_"; // Use la clave pública para cifrar la clave privada para descifrar System.out.println ("Texto original:" + msg); byte [] puk = handledata (PubKey, msg.getbytes (utf), 1); System.out.println ("Datos de archivo cifrados:" + nueva cadena (PUK, UTF)); byte [] dpuk = handledata (prikey, puk, 0); System.out.println ("Datos de archivo descifrados:" + nueva cadena (dpuk, utf)); msg = "jd#nuestro ¥+=#new"; // Use la clave privada para cifrar la clave pública para descifrar System.out.println ("Texto original:" + msg); byte [] prk = handledata (prikey, msg.getbytes (utf), 1); System.out.println ("Datos de archivo cifrados:" + nueva cadena (prk, utf)); byte [] dprk = handleData (PubKey, PRK, 0); System.out.println ("Datos de archivo descifrados:" + nueva cadena (dprk, utf)); Resultados = "Cifrado y descifrado completado"; } catch (Exception e) {E.PrintStackTrace (); } Resultados de retorno; } / ** * * @param k * @param data * @param encrypt 1 cifrado 0 descifrado * @return * @throws excepción * / public static byte [] handledata (clave clave, byte [] data, int type) Exception {if (Key! = null) {cipher ci = cipher.getinstance ("RSA");; if (type == 1) {ci.init (cipher.encrypt_mode, key); byte [] res = ci.dofinal (datos); regresar res; } if (type == 0) {ci.init (cipher.decrypt_mode, key); byte [] res = ci.dofinal (datos); regresar res; }} return null; }}PD: Los amigos interesados en el cifrado y el descifrado también pueden referirse a las herramientas en línea de este sitio:
Herramientas de cifrado y descifrado en línea de texto (incluyendo AES, DE, RC4, etc.):
http://tools.vevb.com/password/txt_encode
Herramienta de cifrado en línea MD5:
http://tools.vevb.com/password/createmd5password
Herramienta de cifrado de algoritmo de hash/hash en línea:
http://tools.vevb.com/password/hash_encrypt
MD5 en línea/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160 herramienta de cifrado:
http://tools.vevb.com/password/hash_md5_sha
En línea SHA1/SHA224/SHA256/SHA384/SHA512 Herramienta de cifrado:
http://tools.vevb.com/password/sha_encode
Para obtener más información sobre el contenido relacionado con Java, consulte los temas de este sitio: "Resumen de las habilidades de operación matemática de Java", "Tutorial sobre estructuras y algoritmos de datos de Java", "Resumen de los caracteres de Java y las habilidades de operación de cadenas", "Resumen de las habilidades de nodo de operación DOM Java" y "Resumen de las habilidades de operación de cache de Java" "
Espero que este artículo sea útil para la programación Java de todos.