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:
Build a REST API with Spring and Java Config
Java Program to Implement Singly Linked List
Java Program to Perform the Unique Factorization of a Given Number
Java Program to Implement Merge Sort on n Numbers Without tail-recursion
Java Program to Find a Good Feedback Edge Set in a Graph
Chuyển đổi từ HashMap sang ArrayList
Java Program to Implement Segment Tree
Java Program to find the peak element of an array using Binary Search approach
Toán tử instanceof trong java
Hướng dẫn Java Design Pattern – Observer
Spring Cloud AWS – RDS
Hướng dẫn Java Design Pattern – Service Locator
Jackson – Unmarshall to Collection/Array
A Guide to TreeMap in Java
Guide to the Synchronized Keyword in Java
How to Kill a Java Thread
Giới thiệu Java Service Provider Interface (SPI) – Tạo các ứng dụng Java dễ mở rộng
Using Spring @ResponseStatus to Set HTTP Status Code
Custom Exception trong Java
Spring Data JPA @Modifying Annotation
Hướng dẫn Java Design Pattern – Visitor
Java Program to Implement Ternary Search Tree
Count Occurrences of a Char in a String
Java Program to Find All Pairs Shortest Path
Java Program to Implement Best-First Search
Java Program to Implement Strassen Algorithm
Java Program to Check Cycle in a Graph using Graph traversal
How to Set TLS Version in Apache HttpClient
Java – Write an InputStream to a File
Java Program to Implement DelayQueue API
Tạo ứng dụng Java RESTful Client với thư viện Retrofit
The Java 8 Stream API Tutorial