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:
Hashtable trong java
Getting a File’s Mime Type in Java
Write/Read cookies using HTTP and Read a file from the internet
Spring REST with a Zuul Proxy
Hướng dẫn Java Design Pattern – Interpreter
Java Program to Perform Encoding of a Message Using Matrix Multiplication
How to Break from Java Stream forEach
Guide to CountDownLatch in Java
Java Program to Implement LinkedBlockingQueue API
An Introduction to ThreadLocal in Java
SOAP Web service: Authentication trong JAX-WS
Spring Boot - Logging
Giới thiệu Google Guice – Dependency injection (DI) framework
Inheritance with Jackson
Generate Spring Boot REST Client with Swagger
Convert String to int or Integer in Java
Spring Boot - Scheduling
Java Program to Implement Merge Sort Algorithm on Linked List
Java Program to Perform Matrix Multiplication
Checked and Unchecked Exceptions in Java
Spring Boot - Sending Email
Guide to Character Encoding
LinkedHashSet trong java
Java Program to Implement Patricia Trie
A Custom Data Binder in Spring MVC
Disable DNS caching
Java Program to Check whether Graph is a Bipartite using 2 Color Algorithm
Java Program to Find Location of a Point Placed in Three Dimensions Using K-D Trees
Bootstrap a Web Application with Spring 5
Sorting Query Results with Spring Data
How to Round a Number to N Decimal Places in Java
Changing Annotation Parameters At Runtime