java rsa encryption algorithm java implementation

http://www.jb51.net/article/92714.htm


Simple and complete code. Through this code, you will have a preliminary understanding of the implementation method of RSA encryption algorithm in Java. You can use this class directly. If the level is high, you can modify and improve the code yourself.
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= " + e);
		System.out.println("n= " + n);
		// get 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 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 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 decrypt
		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());
		}
	}
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326200287&siteId=291194637