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:
Spring RestTemplate Request/Response Logging
Java Program to Create a Random Linear Extension for a DAG
A Quick JUnit vs TestNG Comparison
New Features in Java 15
Lập trình hướng đối tượng (OOPs) trong java
Stack Memory and Heap Space in Java
Java Program to Generate Date Between Given Range
Java Program to Implement Iterative Deepening
Spring Boot Gradle Plugin
ThreadPoolTaskExecutor corePoolSize vs. maxPoolSize
New in Spring Security OAuth2 – Verify Claims
How to Get All Dates Between Two Dates?
Introduction to Spring Security Expressions
Java Program to Implement Nth Root Algorithm
Java Program to Implement Wagner and Fisher Algorithm for online String Matching
Java Program to Check Whether an Input Binary Tree is the Sub Tree of the Binary Tree
Prevent Brute Force Authentication Attempts with Spring Security
Testing an OAuth Secured API with Spring MVC
Immutable ArrayList in Java
Java Program to Decode a Message Encoded Using Playfair Cipher
Exploring the Spring 5 WebFlux URL Matching
Java Program to Implement Repeated Squaring Algorithm
Convert a Map to an Array, List or Set in Java
Join and Split Arrays and Collections in Java
Java Program to Perform Searching Using Self-Organizing Lists
Java Program to Perform Insertion in a BST
Overview of Spring Boot Dev Tools
Removing all duplicates from a List in Java
Java Program to Generate All Pairs of Subsets Whose Union Make the Set
Guide to the Java Clock Class
The Guide to RestTemplate
Spring Boot Actuator