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:
Guide to Guava Table
Introduction to Spring Cloud Stream
Converting Iterator to List
Chuyển đổi Array sang ArrayList và ngược lại
A Guide to JUnit 5 Extensions
Java Program to Implement Shoelace Algorithm
Java Program to Implement Disjoint Set Data Structure
Java Program to Perform Deletion in a BST
Java Program to Solve any Linear Equations
Introduction to Spring Method Security
Spring Boot - Servlet Filter
Sort a HashMap in Java
Spring Boot - CORS Support
Spring Boot Tutorial – Bootstrap a Simple Application
Map to String Conversion in Java
Java Program to Implement Radix Sort
Java Program to Check Whether Graph is DAG
Java Program to Perform Searching in a 2-Dimension K-D Tree
Java Program to Check Whether Topological Sorting can be Performed in a Graph
Form Validation with AngularJS and Spring MVC
Tìm hiểu về xác thực và phân quyền trong ứng dụng
Java Program to Implement the One Time Pad Algorithm
Java Program to Implement Horner Algorithm
Spring REST API with Protocol Buffers
Java Program to Implement Flood Fill Algorithm
Java Program to Find a Good Feedback Edge Set in a Graph
Java Program to Use Boruvka’s Algorithm to Find the Minimum Spanning Tree
Java – Generate Random String
Java Program to Implement Bit Array
Control the Session with Spring Security
Từ khóa throw và throws trong Java
Debug a HttpURLConnection problem