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 Implement Find all Forward Edges in a Graph
Prevent Brute Force Authentication Attempts with Spring Security
Java Program to Implement AVL Tree
Java Program to Implement Sieve Of Atkin
Java Program to Construct an Expression Tree for an Prefix Expression
Programmatic Transaction Management in Spring
Java Program to Apply DFS to Perform the Topological Sorting of a Directed Acyclic Graph
Java Program to Implement WeakHashMap API
Java Program to Check if an UnDirected Graph is a Tree or Not Using DFS
Explain about URL and HTTPS protocol
New Features in Java 10
Getting Started with Forms in Spring MVC
Jackson – Marshall String to JsonNode
Java 8 Stream findFirst() vs. findAny()
Concatenating Strings In Java
Java Program to Test Using DFS Whether a Directed Graph is Strongly Connected or Not
A Guide to JPA with Spring
Hướng dẫn Java Design Pattern – Flyweight
Tính đa hình (Polymorphism) trong Java
Spring Security 5 for Reactive Applications
How to Find an Element in a List with Java
Java Program to Implement the String Search Algorithm for Short Text Sizes
Hướng dẫn Java Design Pattern – Transfer Object
Spring Boot - Twilio
Sử dụng CountDownLatch trong Java
Java Program to Solve any Linear Equations
OAuth2 Remember Me with Refresh Token
Lập trình đa luồng với CompletableFuture trong Java 8
A Custom Data Binder in Spring MVC
How to Change the Default Port in Spring Boot
Bootstrapping Hibernate 5 with Spring
Java Program to Implement SynchronosQueue API