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:

Using a Custom Spring MVC’s Handler Interceptor to Manage Sessions
Giới thiệu Swagger – Công cụ document cho RESTfull APIs
Java Program to Perform Deletion in a BST
Java Program to Find k Numbers Closest to Median of S, Where S is a Set of n Numbers
Intro to Spring Boot Starters
Java Program to Implement Hash Tree
Java Program to Generate a Graph for a Given Fixed Degree Sequence
Java Program to Compute DFT Coefficients Directly
Spring Security 5 – OAuth2 Login
Java Program to Implement Booth Algorithm
Reactive WebSockets with Spring 5
Java Program to Find Median of Elements where Elements are Stored in 2 Different Arrays
Java Convenience Factory Methods for Collections
Running Spring Boot Applications With Minikube
Uploading MultipartFile with Spring RestTemplate
Create Java Applet to Simulate Any Sorting Technique
Java Program to Find MST (Minimum Spanning Tree) using Prim’s Algorithm
Most commonly used String methods in Java
Logout in an OAuth Secured Application
Java Program to Compute Discrete Fourier Transform Using Naive Approach
The XOR Operator in Java
Java Program to Compute Discrete Fourier Transform Using the Fast Fourier Transform Approach
SOAP Web service: Authentication trong JAX-WS
Remove All Occurrences of a Specific Value from a List
Spring Boot - Rest Controller Unit Test
Introduction to Spring Data JPA
Spring REST API with Protocol Buffers
Entity To DTO Conversion for a Spring REST API
Converting Between Byte Arrays and Hexadecimal Strings in Java
Các kiểu dữ liệu trong java
Spring Boot - Securing Web Applications
Java Program to Implement Max Heap