English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
This is a simple and complete code. Through this code, you will have a preliminary understanding of the implementation of RSA encryption algorithm in Java. You can use this class directly, and those with higher level can modify and improve the code by themselves.
package security; import java.security.*; import java.security.spec.*; import java.security.interfaces.*; import javax.crypto.spec.*; import javax.crypto.interfaces.*; import java.io.*; import java.math.*; public class RSADemo { public RSADemo() { {} public static void generateKey() { try { KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(1024); KeyPair kp = kpg.genKeyPair(); PublicKey pbkey = kp.getPublic(); PrivateKey prkey = kp.getPrivate(); // Save the public key FileOutputStream f1 = new FileOutputStream("pubkey.dat"); ObjectOutputStream b1 = new ObjectOutputStream(f1); b1.writeObject(pbkey); // Save the private key FileOutputStream f2 = new FileOutputStream("privatekey.dat"); ObjectOutputStream b2 = new ObjectOutputStream(f2); b2.writeObject(prkey); } catch (Exception e) { {} {} public static void encrypt() throws Exception { String s = "Hello World!"; // Get the public key and parameters e, n FileInputStream f = new FileInputStream("pubkey.dat"); ObjectInputStream b = new ObjectInputStream(f); RSAPublicKey pbk = (RSAPublicKey) b.readObject(); BigInteger e = pbk.getPublicExponent(); BigInteger n = pbk.getModulus(); System.out.println("e= "); + ); System.out.println("n= "); + n); // Get the plaintext m byte ptext[] = s.getBytes("UTF-8"; BigInteger m = new BigInteger(ptext); // Calculate the ciphertext c BigInteger c = m.modPow(e, n); System.out.println("c= "); + c); // Save the ciphertext String cs = c.toString(); BufferedWriter out = new BufferedWriter( new OutputStreamWriter(new FileOutputStream("encrypt.dat"))); out.write(cs, 0, cs.length()); out.close(); {} public static void decrypt() throws Exception { // Read the ciphertext BufferedReader in = new BufferedReader( new InputStreamReader(new FileInputStream("encrypt.dat"))); String ctext = in.readLine(); BigInteger c = new BigInteger(ctext); // Read private key FileInputStream f = new FileInputStream("privatekey.dat"); ObjectInputStream b = new ObjectInputStream(f); RSAPrivateKey prk = (RSAPrivateKey) b.readObject(); BigInteger d = prk.getPrivateExponent(); // Get private key parameters and decryption BigInteger n = prk.getModulus(); System.out.println("d= "); + d); System.out.println("n= "); + n); BigInteger m = c.modPow(d, n); // Display decryption result System.out.println("m= "); + m); byte[] mt = m.toByteArray(); System.out.println("PlainText is "); for (int i = 0; i < mt.length; i++) { System.out.print((char) mt[i]); {} {} public static void main(String args[]) { try { generateKey(); encrypt(); decrypt(); } catch (Exception e) { System.out.println(e.toString()); {} {} {}
This is the full content of the simple Java implementation of RSA encryption algorithm (must read) shared by the editor. I hope it can provide a reference for everyone and I also hope everyone will support the Yelling Tutorial.