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 Binary Heap
Java Program to Solve the 0-1 Knapsack Problem
Jackson – Marshall String to JsonNode
Kiểu dữ liệu Ngày Giờ (Date Time) trong java
Filtering a Stream of Optionals in Java
Hướng dẫn Java Design Pattern – Adapter
Java Program to Implement Brent Cycle Algorithm
Spring MVC Async vs Spring WebFlux
Java Program to Find kth Largest Element in a Sequence
Java Program to Implement VList
Spring Security Authentication Provider
Java Program to Implement Triply Linked List
Java Program to Implement JobStateReasons API
Java Byte Array to InputStream
Receive email using IMAP
Class Loaders in Java
Spring Data – CrudRepository save() Method
Java Streams vs Vavr Streams
Convert Hex to ASCII in Java
Java Program to Implement Patricia Trie
Java Program to Find the GCD and LCM of two Numbers
Hashing a Password in Java
Primitive Type Streams in Java 8
Using Optional with Jackson
Serve Static Resources with Spring
Java Program to Compute the Area of a Triangle Using Determinants
Migrating from JUnit 4 to JUnit 5
Sử dụng CountDownLatch trong Java
Java Program to Perform Polygon Containment Test
Guide to the Volatile Keyword in Java
Java Program to Implement Bloom Filter
Send email with SMTPS (eg. Google GMail)