# Untitled

a guest
Oct 21st, 2019
122
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. /**
2. * Author: M&K
3. */
4. package Algorithms;
5.
6. import java.math.BigInteger;
7. import java.util.Random;
8. import java.util.Scanner;
9.
10. public class RSA {
11.
12.
13. public static void main(String[] args) {
14.
15. // Unless you have Super computer do not set bitLength greater then 10 ( 2^10 upper bound )
16. BigInteger pPrime = BigInteger.probablePrime(10,new Random()); //Generate random prime of with 2^10 as upper bound
17. BigInteger qPrime = BigInteger.probablePrime(10,new Random());
18.
19. RSA(pPrime,qPrime);
20. }
21.
22. public static void RSA(BigInteger p, BigInteger q){
23. System.out.println("First Prime = " + p);
24. System.out.println("Second Prime = " + q);
25. BigInteger N = p.multiply(q);
26. // Z = (p-1)*(q-1)
27. BigInteger Z = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
28.
29. BigInteger e = BigInteger.ZERO; // Public key exponent, 'e' is relative prime to Z
30.
31. // GCD(e,Z) == 1 would mean that both do not have any common factors
32. for (long i = 2; i < Z.longValue(); i++) {
33. if(Z.gcd(BigInteger.valueOf(i)).equals(BigInteger.ONE)){
34. e = BigInteger.valueOf(i);
35. break;
36. }
37. }
38.
39. // BigInteger e = BigInteger.valueOf(65537); // Often e is chosen to be (2^16) -1 i.e 65537
40.
41. System.out.println("totient function Z = " + Z);
42. System.out.println("public key e = " + e);
43.
44.
45. // int d = modInverse(e, Z); // Private key exponent
46. BigInteger d = e.modInverse(Z);
47. System.out.println("private key d = " + d);
48.
49. Scanner read = new Scanner(System.in);