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:
The Guide to RestTemplate
Java 9 Stream API Improvements
Spring MVC Setup with Kotlin
Java Program to Find Maximum Element in an Array using Binary Search
List Interface trong Java
Một số từ khóa trong Java
Hướng dẫn Java Design Pattern – DAO
Java Program to implement Priority Queue
Queue và PriorityQueue trong Java
Java Program to Find MST (Minimum Spanning Tree) using Prim’s Algorithm
Java Program to Implement Sieve Of Eratosthenes
An Intro to Spring Cloud Task
An Introduction to Java.util.Hashtable Class
Sử dụng JDBC API thực thi câu lệnh truy vấn dữ liệu
Rest Web service: Filter và Interceptor với Jersey 2.x (P2)
Spring Boot - Admin Server
Java Program to Find k Numbers Closest to Median of S, Where S is a Set of n Numbers
Hướng dẫn Java Design Pattern – Decorator
New Features in Java 8
Introduction to Project Reactor Bus
HandlerAdapters in Spring MVC
Java Program to Implement TreeMap API
Generating Random Numbers in a Range in Java
Introduction to Spring Method Security
Java Program to Implement Maximum Length Chain of Pairs
Java Program to Implement Fisher-Yates Algorithm for Array Shuffling
“Stream has already been operated upon or closed” Exception in Java
Sắp xếp trong Java 8
Find the Registered Spring Security Filters
Giới thiệu về Stream API trong Java 8
XML Serialization and Deserialization with Jackson
Tiêu chuẩn coding trong Java (Coding Standards)