EXP -06
AIM: Implementation of RSA algorithm.
Code:
import [Link];
import [Link];
import [Link];
public class RSA {
// Function to find GCD
public static BigInteger gcd(BigInteger a, BigInteger b) {
while () {
BigInteger temp = b;
b = [Link](b);
a = temp;
}
return a;
}
public static void main(String[] args) {
Scanner sc = new Scanner([Link]);
Random rand = new Random();
// Input two prime numbers
[Link]("Enter a prime number p: ");
BigInteger p = [Link]();
[Link]("Enter a prime number q: ");
BigInteger q = [Link]();
// Prime check
if () {
[Link]("Error: p is not a prime number. Exiting.");
return;
}
if () {
[Link]("Error: q is not a prime number. Exiting.");
return;
}
// n = p * q
BigInteger n = [Link](q);
// phi = (p - 1) * (q - 1)
BigInteger phi =
([Link]([Link])).multiply([Link]([Link]));
// Choose e such that 1 < e < phi and gcd(e, phi) = 1
BigInteger e, d;
while (true) {
e = new BigInteger([Link](), rand);
if ([Link]([Link]) > 0 && [Link](phi) < 0
&& gcd(e, phi).equals([Link])) {
d = [Link](phi);
if () break; // Ensure e != d
}
}
[Link]("\nPublic Key: (" + e + ", " + n + ")");
[Link]("Private Key: (" + d + ", " + n + ")");
// Consume leftover newline
[Link]();
// Input message
[Link]("\nEnter the message to encrypt: ");
String message = [Link]();
char[] chars = [Link]();
// Encrypt each character
BigInteger[] encrypted = new BigInteger[[Link]];
[Link]("Encrypted Message: ");
for (int i = 0; i < [Link]; i++) {
BigInteger m = [Link]((int) chars[i]);
encrypted[i] = [Link](e, n);
[Link](encrypted[i] + " ");
}
// Decrypt
[Link]("\nDecrypted Message: ");
for (BigInteger c : encrypted) {
BigInteger m = [Link](d, n);
char decryptedChar = (char) [Link]();
[Link](decryptedChar);
}
}
}