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 Create a Random Linear Extension for a DAG
REST Pagination in Spring
Tạo chương trình Java đầu tiên sử dụng Eclipse
Java Scanner hasNext() vs. hasNextLine()
The Dining Philosophers Problem in Java
Java Program to Implement Sorted Circular Doubly Linked List
Java Program to Implement Sorted Array
HttpClient 4 – Follow Redirects for POST
Getting a File’s Mime Type in Java
Java Program to Implement Binomial Tree
Working With Maps Using Streams
Spring Cloud Bus
Spring’s RequestBody and ResponseBody Annotations
Java Program to Find the Vertex Connectivity of a Graph
Java Program to Perform the Sorting Using Counting Sort
Java Program to Implement Affine Cipher
Remove the First Element from a List
Loại bỏ các phần tử trùng trong một ArrayList như thế nào?
Introduction to the Java NIO Selector
Java Program to Implement Unrolled Linked List
Java Program to Check if a Point d lies Inside or Outside a Circle Defined by Points a, b, c in a Pl...
Tạo ứng dụng Java RESTful Client với thư viện OkHttp
Control the Session with Spring Security
Rest Web service: Filter và Interceptor với Jersey 2.x (P2)
Inject Parameters into JUnit Jupiter Unit Tests
More Jackson Annotations
Java Program to Create a Minimal Set of All Edges Whose Addition will Convert it to a Strongly Conne...
So sánh Array và ArrayList trong Java
Send email with JavaMail
Injecting Prototype Beans into a Singleton Instance in Spring
Giới thiệu HATEOAS
Java Program to Implement Sieve Of Atkin