Este artigo descreve o algoritmo de criptografia e descriptografia da RSA implementado em Java. Compartilhe -o para sua referência, como segue:
importar java.awt.alphacomposite; importar java.awt.color; importar java.awt.font; importar java.awt.graphics2d; importar java.awt.image; importedimage; import.awt.renderhints; import java.awt.image.bufferEdimage; java.io.fileInputStream; importar java.io.fileOutputStream; importar java.io.ObjectInputStream; importar java.io.objectoutstream; importar java.security.Key; import java.security.Keypair; imporenda.memecurity.KeyPenerator; ImportGenerator; java.security.interfaces.rsaprivateKey; importar java.security.interfaces.rsapublickey; importar javax.crypto.cipher; public classe rsautils {public static string mAwkeyfile (string pubyfile, string prikeyfile) {string " tente {// KyypairGenerator é usado para gerar pares de teclas públicas e privadas, e o objeto é gerado com base no algoritmo RSA. KeypairGenerator gen = keypairGenerator.getInstance ("rsa"); // inicializa o gerador de pares de chaves, o tamanho da chave é 1024 bits gen.initialize (1024); // // gera um número aleatório forte // secureRandom aleatória = new SecureRandom (); // gen.initialize (1024, aleatório); // Gere um par de teclas e salve -o no par de teclado par = gen.GenerateKeypair (); // Obtenha a chave privada rsaprivateKey Prikey = (rsaprivateKey) par.getprivate (); // Obtenha a chave pública rsapublickey pubKey = (rsapublickey) par.getpublic (); // gerar arquivo de chave privado ObjectutputStream OS = new ObjectOutputStream (new FileOutputStream (Prikeyfile)); OS.WriteObject (Prikey); os.flush (); os.close (); // gerar arquivo de chave pública OS = new ObjectOutputStream (new FileOutputStream (PubKeyFile)); OS.WriteObject (PubKey); os.flush (); os.close (); resultado = "Gere o arquivo de chave pública ["+pubKeyFile+"] Gere o arquivo de chave privado ["+Prikeyfile+"]"; } catch (Exceção e) {e.printStackTrace (); } resultado de retorno; } public static void main (string [] args) {try {string pubfile = "f: /images/pub.key"; String licença = "f: /images/pri.key"; Resultado da string = null; // resultado = MakeKeyFile (PubFile, License); resultado = Markpupra (PubFile, Licença); System.out.println (resultado); } catch (Exceção e) {e.printStackTrace (); }} public static string markpupra (string pubfile, string licença) {string Results = "Ocorreu o erro de criptografia"; tente {objectInputStream OS = new ObjectInputStream (new FileInputStream (PubFile)); Rsapublickey pubKey = (rsapublickey) os.readObject (); os.close (); OS = new ObjectInputStream (new FileInputStream (prrifile)); RsaprivateKey Prikey = (rsaprivateKey) os.readObject (); os.close (); String utf = "utf-8"; String msg = "## China % de % pessoas @+_"; // Use a chave pública para criptografar a chave privada para descriptografar o sistema.out.println ("texto original:" + msg); byte [] puk = manuseada (PubKey, msg.getbytes (UTF), 1); System.out.println ("Dados do arquivo criptografado:" + new String (PUK, UTF)); byte [] dpuk = manuseado (Prikey, puk, 0); System.out.println ("Dados de arquivo descriptografados:" + new String (DPUK, UTF)); msg = "jd#nosso ¥+=#new"; // Use a chave privada para criptografar a chave pública para descriptografar o sistema.out.println ("texto original:" + msg); byte [] prk = manipulado (Prikey, msg.getbytes (utf), 1); System.out.println ("Dados do arquivo criptografado:" + new String (PRK, UTF)); byte [] dPrk = Handledata (PubKey, PRK, 0); System.out.println ("Dados de arquivo descriptografados:" + new String (DPRC, UTF)); Resultados = "Criptografia e descriptografia concluídas"; } catch (Exceção e) {e.printStackTrace (); } retornar os resultados; } / ** * * @param k * @param dados * @param criptografar 1 criptografia 0 descriptografia * @return * @throws exceção * / public static byte [] manuseado (chave de chave, dados byte [], int tipo) lança exceção {if (key! if (type == 1) {ci.init (cipher.encrypt_mode, chave); byte [] res = ci.dofinal (dados); retornar res; } if (type == 0) {ci.init (cipher.decrypt_mode, chave); byte [] res = ci.dofinal (dados); retornar res; }} retornar nulo; }}PS: Amigos interessados em criptografia e descriptografia também podem se referir às ferramentas on -line deste site:
Texto Ferramentas de criptografia e descriptografia on -line (incluindo AES, DES, RC4, etc.):
http://tools.vevb.com/password/txt_encode
Ferramenta de criptografia online do MD5:
http://tools.vevb.com/password/createmd5password
Ferramenta de criptografia de algoritmo de hash/hash online:
http://tools.vevb.com/password/hash_encrypt
Online md5/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160 ferramenta de criptografia:
http://tools.vevb.com/password/hash_md5_sha
Online SHA1/SHA224/SHA256/SHA384/SHA512 Ferramenta de criptografia:
http://tools.vevb.com/password/sha_encode
Para obter mais informações sobre o conteúdo relacionado a Java, consulte os tópicos deste site: "Resumo das habilidades de operação matemática de Java", "Tutorial sobre estruturas e algoritmos de dados Java", "Resumo dos caracteres Java e habilidades de operação de cordas", "Resumo da operação Java Dom Node Skills e" Resumo de Java Cache Skills Skills Skills ".
Espero que este artigo seja útil para a programação Java de todos.