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:
Iterable to Stream in Java
Bootstrap a Web Application with Spring 5
Getting Started with Stream Processing with Spring Cloud Data Flow
Iterating over Enum Values in Java
Custom Error Pages with Spring MVC
Loại bỏ các phần tử trùng trong một ArrayList như thế nào?
Java Program to Perform Right Rotation on a Binary Search Tree
How to Get the Last Element of a Stream in Java?
Multi Dimensional ArrayList in Java
An Intro to Spring Cloud Contract
Compact Strings in Java 9
Remove the First Element from a List
JUnit5 @RunWith
Spring Boot - Securing Web Applications
Creating Docker Images with Spring Boot
Java Program to Generate All Subsets of a Given Set in the Lexico Graphic Order
Using Java Assertions
Java Program to Implement the Program Used in grep/egrep/fgrep
Spring Boot - Enabling HTTPS
Using a Custom Spring MVC’s Handler Interceptor to Manage Sessions
Java Program to do a Breadth First Search/Traversal on a graph non-recursively
Jackson Exceptions – Problems and Solutions
Adding Parameters to HttpClient Requests
How to Find an Element in a List with Java
Java Program to Generate All Possible Combinations Out of a, b, c, d, e
Java Program to Check whether Undirected Graph is Connected using DFS
Giới thiệu Google Guice – Injection, Scope
Java Program to Find the Connected Components of an UnDirected Graph
Java Program to Check for balanced parenthesis by using Stacks
Removing Elements from Java Collections
Practical Java Examples of the Big O Notation
Từ khóa this và super trong Java