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 Find Location of a Point Placed in Three Dimensions Using K-D Trees
Binary Numbers in Java
Sorting Query Results with Spring Data
LIKE Queries in Spring JPA Repositories
Java Program to Check whether Graph is a Bipartite using BFS
Java Program to Represent Graph Using 2D Arrays
Java Program to Implement the linear congruential generator for Pseudo Random Number Generation
Spring Boot - Enabling HTTPS
Guide to System.gc()
Updating your Password
Hướng dẫn Java Design Pattern – Memento
Java Program to Implement Skew Heap
Registration with Spring Security – Password Encoding
Java Program to Use Boruvka’s Algorithm to Find the Minimum Spanning Tree
Overview of the java.util.concurrent
Guide to BufferedReader
Convert char to String in Java
New Features in Java 11
Marker Interface trong Java
Why String is Immutable in Java?
Java Convenience Factory Methods for Collections
Check if there is mail waiting
So sánh ArrayList và LinkedList trong Java
Java Program to Implement Merge Sort Algorithm on Linked List
Spring Boot - Building RESTful Web Services
A Guide to Java 9 Modularity
Hướng dẫn Java Design Pattern – Adapter
Java NIO2 Path API
Vấn đề Nhà sản xuất (Producer) – Người tiêu dùng (Consumer) và đồng bộ hóa các luồng trong Java
Java Program to Implement IdentityHashMap API
Spring Boot - Runners
String Processing with Apache Commons Lang 3