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:
Getting Started with GraphQL and Spring Boot
Implementing a Binary Tree in Java
Using Java Assertions
Java Program to Implement ConcurrentSkipListMap API
New Features in Java 8
Java Program to Implement the Vigenere Cypher
Java Program to Implement ConcurrentLinkedQueue API
The Guide to RestTemplate
Generating Random Dates in Java
Instance Profile Credentials using Spring Cloud
A Guide to Java HashMap
Java Program to Implement Slicker Algorithm that avoids Triangulation to Find Area of a Polygon
Guide to the Java TransferQueue
Lớp Collectors trong Java 8
Các nguyên lý thiết kế hướng đối tượng – SOLID
Java Program to Implement Dijkstra’s Algorithm using Queue
Simple Single Sign-On with Spring Security OAuth2
Java Program to Repeatedly Search the Same Text (such as Bible by building a Data Structure)
How to Define a Spring Boot Filter?
Removing all Nulls from a List in Java
Java Program to Implement Pollard Rho Algorithm
Java Program to Check Cycle in a Graph using Graph traversal
Java Program to Find ith Largest Number from a Given List Using Order-Statistic Algorithm
Spring Cloud AWS – EC2
Convert Hex to ASCII in Java
Java Program to Perform Arithmetic Operations on Numbers of Size
Spring Security OAuth Login with WebFlux
Hướng dẫn Java Design Pattern – Observer
How to Get All Dates Between Two Dates?
Spring @Primary Annotation
Java Program to Generate Randomized Sequence of Given Range of Numbers
Limiting Query Results with JPA and Spring Data JPA