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:
Java Program to Implement Dijkstra’s Algorithm using Priority Queue
Multipart Upload with HttpClient 4
Java Program to Implement Gale Shapley Algorithm
Error Handling for REST with Spring
Generate Spring Boot REST Client with Swagger
Programmatic Transaction Management in Spring
Adding Shutdown Hooks for JVM Applications
Spring Cloud AWS – EC2
Java Program to Implement LinkedList API
Java Program to Perform Searching Using Self-Organizing Lists
Phương thức forEach() trong java 8
Java Program to Implement Bubble Sort
Fixing 401s with CORS Preflights and Spring Security
Spring Security and OpenID Connect
A Guide to Spring Cloud Netflix – Hystrix
So sánh ArrayList và Vector trong Java
Write/Read cookies using HTTP and Read a file from the internet
Java Program to Implement Nth Root Algorithm
Java Program to Check Whether Topological Sorting can be Performed in a Graph
Java Program to Perform Optimal Paranthesization Using Dynamic Programming
Làm thế nào tạo instance của một class mà không gọi từ khóa new?
Java Program to Search Number Using Divide and Conquer with the Aid of Fibonacci Numbers
Java Program to Implement Park-Miller Random Number Generation Algorithm
Java – Byte Array to Reader
A Guide to TreeSet in Java
Java Program to Repeatedly Search the Same Text (such as Bible by building a Data Structure)
Java Program to Implement Word Wrap Problem
Chương trình Java đầu tiên
Java Program to Implement Branch and Bound Method to Perform a Combinatorial Search
Java Concurrency Interview Questions and Answers
Guide to the Fork/Join Framework in Java
The HttpMediaTypeNotAcceptableException in Spring MVC