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:

Returning Custom Status Codes from Spring Controllers
Java Program to Implement Self organizing List
Intro to Spring Boot Starters
Hướng dẫn Java Design Pattern – Composite
Java – Generate Random String
Spring Boot - Securing Web Applications
Guide to Dynamic Tests in Junit 5
Kiểu dữ liệu Ngày Giờ (Date Time) trong java
Servlet 3 Async Support with Spring MVC and Spring Security
Java Program to Find the Number of Ways to Write a Number as the Sum of Numbers Smaller than Itself
Spring MVC + Thymeleaf 3.0: New Features
Java Program to Implement Binomial Heap
HttpClient 4 Cookbook
Java Program to Implement Solovay Strassen Primality Test Algorithm
Hashing a Password in Java
OAuth2 for a Spring REST API – Handle the Refresh Token in AngularJS
Java Program to Find Nearest Neighbor for Static Data Set
Tạo ứng dụng Java RESTful Client không sử dụng 3rd party libraries
Tips for dealing with HTTP-related problems
Lớp Collectors trong Java 8
Spring 5 and Servlet 4 – The PushBuilder
Intersection of Two Lists in Java
RegEx for matching Date Pattern in Java
Base64 encoding và decoding trong Java 8
Java Program to Implement LinkedBlockingDeque API
Concatenating Strings In Java
JPA/Hibernate Persistence Context
Spring Security OAuth2 – Simple Token Revocation
Java Program to Implement Merge Sort on n Numbers Without tail-recursion
Java Program to Construct a Random Graph by the Method of Random Edge Selection
Serverless Functions with Spring Cloud Function
Using Spring ResponseEntity to Manipulate the HTTP Response