1// Aim: Program to perform Diffie-Hellman key exchange (Diffie-Hellman Key Exchange).
2import java.util.*;
3import java.math.BigInteger;
4public class diffie {
5 public static void main(String[] args) {
6 Scanner sc = new Scanner(System.in);
7 System.out.print("Enter a prime number (q): ");
8 BigInteger q = sc.nextBigInteger();
9 System.out.print("Enter a primitive root :");
10 BigInteger a = sc.nextBigInteger();
11 System.out.print("Enter private key for user A :");
12 BigInteger xA = sc.nextBigInteger();
13 System.out.print("Enter private key for user B :");
14 BigInteger xB = sc.nextBigInteger();
15 BigInteger yA = a.modPow(xA, q);
16 BigInteger yB = a.modPow(xB, q);
17 System.out.println("Public key for user A : " + yA);
18 System.out.println("Public key for user B : " + yB);
19 BigInteger kA = yB.modPow(xA, q);
20 BigInteger kB = yA.modPow(xB, q);
21 System.out.println("Secret key for user A : " + kA);
22 System.out.println("Secret key for user B : " + kB);
23 sc.close();
24 }
25}
26