Java Program to Implement the RSA Algorithm

This is a java program to implement RSA algorithm. RSA is one of the first practicable public-key cryptosystems and is widely used for secure data transmission. In such a cryptosystem, the encryption key is public and differs from the decryption key which is kept secret. In RSA, this asymmetry is based on the practical difficulty of factoring the product of two large prime numbers, the factoring problem. RSA stands for Ron Rivest, Adi Shamir and Leonard Adleman.

Here is the source code of the Java Program to Implement the RSA Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.

package com.maixuanviet.setandstring;
 
import java.io.DataInputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.util.Random;
 
public class RSA
{
    private BigInteger p;
    private BigInteger q;
    private BigInteger N;
    private BigInteger phi;
    private BigInteger e;
    private BigInteger d;
    private int        bitlength = 1024;
    private Random     r;
 
    public RSA()
    {
        r = new Random();
        p = BigInteger.probablePrime(bitlength, r);
        q = BigInteger.probablePrime(bitlength, r);
        N = p.multiply(q);
        phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
        e = BigInteger.probablePrime(bitlength / 2, r);
        while (phi.gcd(e).compareTo(BigInteger.ONE) > 0 && e.compareTo(phi) < 0)
        {
            e.add(BigInteger.ONE);
        }
        d = e.modInverse(phi);
    }
 
    public RSA(BigInteger e, BigInteger d, BigInteger N)
    {
        this.e = e;
        this.d = d;
        this.N = N;
    }
 
    @SuppressWarnings("deprecation")
    public static void main(String[] args) throws IOException
    {
        RSA rsa = new RSA();
        DataInputStream in = new DataInputStream(System.in);
        String teststring;
        System.out.println("Enter the plain text:");
        teststring = in.readLine();
        System.out.println("Encrypting String: " + teststring);
        System.out.println("String in Bytes: "
                + bytesToString(teststring.getBytes()));
        // encrypt
        byte[] encrypted = rsa.encrypt(teststring.getBytes());
        // decrypt
        byte[] decrypted = rsa.decrypt(encrypted);
        System.out.println("Decrypting Bytes: " + bytesToString(decrypted));
        System.out.println("Decrypted String: " + new String(decrypted));
    }
 
    private static String bytesToString(byte[] encrypted)
    {
        String test = "";
        for (byte b : encrypted)
        {
            test += Byte.toString(b);
        }
        return test;
    }
 
    // Encrypt message
    public byte[] encrypt(byte[] message)
    {
        return (new BigInteger(message)).modPow(e, N).toByteArray();
    }
 
    // Decrypt message
    public byte[] decrypt(byte[] message)
    {
        return (new BigInteger(message)).modPow(d, N).toByteArray();
    }
}

Output:

$ javac RSA.java
$ java RSA
 
Enter the plain text:
MaiXuanViet
Encrypting String: MaiXuanViet
String in Bytes: 8397110102111117110100114121
Decrypting Bytes: 8397110102111117110100114121
Decrypted String: MaiXuanViet

Related posts:

“Stream has already been operated upon or closed” Exception in Java
Hướng dẫn Java Design Pattern – Intercepting Filter
Java Program to Perform Right Rotation on a Binary Search Tree
Apache Commons Collections MapUtils
Java Program to Perform Left Rotation on a Binary Search Tree
Java Program to Implement Cubic convergence 1/pi Algorithm
How to Find an Element in a List with Java
Daemon Threads in Java
Hướng dẫn Java Design Pattern – DAO
Spring Boot - CORS Support
Automatic Property Expansion with Spring Boot
Hướng dẫn Java Design Pattern – Object Pool
Java Program to Implement Nth Root Algorithm
Java Program to implement Priority Queue
Introduction to Using FreeMarker in Spring MVC
Java Program to Implement ConcurrentHashMap API
Cài đặt và sử dụng Swagger UI
Java Program to Find MST (Minimum Spanning Tree) using Kruskal’s Algorithm
Java Program to Implement Sorted Array
Java Program to Find Minimum Number of Edges to Cut to make the Graph Disconnected
Mapping a Dynamic JSON Object with Jackson
Java Program to Implement Graham Scan Algorithm to Find the Convex Hull
Java Program to Implement the One Time Pad Algorithm
Pagination and Sorting using Spring Data JPA
Java InputStream to String
Java Program to Find Number of Spanning Trees in a Complete Bipartite Graph
Jackson vs Gson
Java – Write a Reader to File
Bootstrap a Web Application with Spring 5
MyBatis with Spring
Java Program to Find Number of Articulation points in a Graph
Java Program to Check Cycle in a Graph using Graph traversal