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:
Class Loaders in Java
Toán tử trong java
Spring AMQP in Reactive Applications
Java Program to Implement Meldable Heap
Spring Cloud – Bootstrapping
Java Program to Implement Branch and Bound Method to Perform a Combinatorial Search
Logging in Spring Boot
Guide to the Fork/Join Framework in Java
RestTemplate Post Request with JSON
Send an email using the SMTP protocol
HashMap trong Java hoạt động như thế nào?
Consumer trong Java 8
Apache Commons Collections BidiMap
Introduction to Spring Data JDBC
Lập trình đa luồng với Callable và Future trong Java
Java Program to Find the Mode in a Data Set
A Quick Guide to Spring MVC Matrix Variables
Java Program to Describe the Representation of Graph using Incidence List
Find the Registered Spring Security Filters
Java Program to Implement Iterative Deepening
Count Occurrences of a Char in a String
Marker Interface trong Java
HttpClient Timeout
Spring Boot - Enabling Swagger2
Hướng dẫn Java Design Pattern – Factory Method
Call Methods at Runtime Using Java Reflection
Convert Time to Milliseconds in Java
Hướng dẫn Java Design Pattern – Dependency Injection
Java Program to do a Breadth First Search/Traversal on a graph non-recursively
Java Program to Implement VList
Giới thiệu Java Service Provider Interface (SPI) – Tạo các ứng dụng Java dễ mở rộng
Java Program to Implement Sieve Of Sundaram