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:
Guide to Dynamic Tests in Junit 5
Simplify the DAO with Spring and Java Generics
Hướng dẫn Java Design Pattern – Iterator
Chuyển đổi giữa các kiểu dữ liệu trong Java
Spring Boot Gradle Plugin
Từ khóa throw và throws trong Java
Query Entities by Dates and Times with Spring Data JPA
A Guide to Spring Cloud Netflix – Hystrix
The SpringJUnitConfig and SpringJUnitWebConfig Annotations in Spring 5
Comparing Strings in Java
Iterating over Enum Values in Java
Java Program to Implement Binary Heap
Java Program to Create a Random Graph Using Random Edge Generation
Thực thi nhiều tác vụ cùng lúc như thế nào trong Java?
String Processing with Apache Commons Lang 3
Using JWT with Spring Security OAuth
Debug a JavaMail Program
Apache Commons Collections BidiMap
Java Program to Implement Sorted Doubly Linked List
Apache Commons Collections OrderedMap
Java Program to Implement an Algorithm to Find the Global min Cut in a Graph
Marker Interface trong Java
SOAP Web service: Upload và Download file sử dụng MTOM trong JAX-WS
Java Program to Implement DelayQueue API
Java Program to Implement Ford–Fulkerson Algorithm
Java Program to Implement Levenshtein Distance Computing Algorithm
Apache Commons Collections SetUtils
Spring WebClient and OAuth2 Support
Find the Registered Spring Security Filters
Configure a Spring Boot Web Application
Introduction to Spring Cloud Netflix – Eureka
Iterable to Stream in Java