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 Check if a Given Graph Contain Hamiltonian Cycle or Not
Java Program to Implement Gift Wrapping Algorithm in Two Dimensions
Spring Boot - Thymeleaf
Enum trong java
Java Program to Implement Meldable Heap
Java Program to Perform Searching in a 2-Dimension K-D Tree
Java Program to Check Whether an Input Binary Tree is the Sub Tree of the Binary Tree
Java – Convert File to InputStream
Java Program to Find Nearest Neighbor for Dynamic Data Set
Java Program to Perform Matrix Multiplication
Java Program to Solve the Fractional Knapsack Problem
Hướng dẫn Java Design Pattern – Factory Method
Java Program to Describe the Representation of Graph using Incidence List
Default Password Encoder in Spring Security 5
Guide to java.util.Formatter
Java Program to Implement Sparse Matrix
Java Program to Implement LinkedList API
Java – Reader to Byte Array
Java Program to Perform Addition Operation Using Bitwise Operators
Creating a Web Application with Spring 5
A Quick Guide to Spring Cloud Consul
Using the Not Operator in If Conditions in Java
Simultaneous Spring WebClient Calls
Spring 5 WebClient
OAuth2 for a Spring REST API – Handle the Refresh Token in Angular
Spring Boot Change Context Path
Serialize Only Fields that meet a Custom Criteria with Jackson
Bootstrapping Hibernate 5 with Spring
Extract network card address
Spring Security OAuth2 – Simple Token Revocation
Java Program to Implement IdentityHashMap API
How to Convert List to Map in Java