From b4f6de7a4f55a93646394699dc931c34e6ff375f Mon Sep 17 00:00:00 2001 From: SAIRAM REDDY Date: Mon, 16 Oct 2017 17:18:19 +0530 Subject: [PATCH] Added RSA algorithm in Java --- encryption_algorithms/RSA.java | 81 ++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 encryption_algorithms/RSA.java diff --git a/encryption_algorithms/RSA.java b/encryption_algorithms/RSA.java new file mode 100644 index 000000000..5acd698b5 --- /dev/null +++ b/encryption_algorithms/RSA.java @@ -0,0 +1,81 @@ +package com.sanfoundry.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(); + } +}