English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

A Simple Implementation Method of RSA Encryption Algorithm in Java (Must Read)

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.

You May Also Like