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 Hash Tables
Tạo ứng dụng Java RESTful Client không sử dụng 3rd party libraries
A Guide to Java HashMap
Spring RequestMapping
Java Program to Find Nearest Neighbor for Dynamic Data Set
Spring Security Login Page with React
Java Program to Find the Edge Connectivity of a Graph
Java Program to Implement Euclid GCD Algorithm
Changing Annotation Parameters At Runtime
Compare Two JSON Objects with Jackson
Lập trình đa luồng với Callable và Future trong Java
Serialize Only Fields that meet a Custom Criteria with Jackson
Java Program to Implement the Bin Packing Algorithm
Java Program to Test Using DFS Whether a Directed Graph is Weakly Connected or Not
Using the Not Operator in If Conditions in Java
Java Program to Implement Graham Scan Algorithm to Find the Convex Hull
Java equals() and hashCode() Contracts
Hướng dẫn sử dụng biểu thức chính quy (Regular Expression) trong Java
Java Program to Check whether Directed Graph is Connected using BFS
Java Program to Perform Optimal Paranthesization Using Dynamic Programming
Prevent Cross-Site Scripting (XSS) in a Spring Application
HashMap trong Java hoạt động như thế nào?
HttpClient Timeout
Introduction to Spring Method Security
Spring Boot - Enabling Swagger2
How to Convert List to Map in Java
Hướng dẫn Java Design Pattern – Decorator
Add Multiple Items to an Java ArrayList
Java Program to Implement Pagoda
Spring Security Remember Me
Java Program to Represent Graph Using Adjacency Matrix
Introduction to the Java NIO2 File API