1// Aim: Program to perform DES encryption with Diffie-Hellman key exchange (DES with Diffie-Hellman Key Exchange).
2import java.util.*;
3import javax.crypto.*;
4import javax.crypto.spec.*;
5import java.math.BigInteger;
6
7public class des_with_diffie{
8 public static void main(String[] args) throws Exception{
9 //diffie-hellman
10
11 Scanner sc = new Scanner(System.in);
12 System.out.print("Enter a prime number (q): ");
13 BigInteger q = sc.nextBigInteger();
14 System.out.print("Enter a primitive root: ");
15 BigInteger a = sc.nextBigInteger();
16 System.out.print("Enter private key for user A: ");
17 BigInteger xA = sc.nextBigInteger();
18 System.out.print("Enter private key for user B: ");
19 BigInteger xB = sc.nextBigInteger();
20 BigInteger yA = a.modPow(xA, q);
21 BigInteger yB = a.modPow(xB, q);
22 BigInteger kA = yB.modPow(xA, q);
23 BigInteger kB = yA.modPow(xB, q);
24
25 if(!kA.equals(kB)){
26 System.out.println("Error: Keys do not match!");
27 return;
28 }
29
30 //des key ondaki.
31
32 System.out.println("Shared secret key : "+kA);
33 byte[] keyBytes = Arrays.copyOf(kA.toByteArray(),8);
34 SecretKey key = new SecretKeySpec(keyBytes, "DES");
35
36 //des algorithm
37
38 System.out.print("Enter text: ");
39 sc.nextLine();
40 String msg = sc.nextLine();
41 sc.close();
42
43 System.out.println("DES key : "+Base64.getEncoder().encodeToString(keyBytes));
44
45 Cipher cpr = Cipher.getInstance("DES/ECB/PKCS5Padding");
46 cpr.init(Cipher.ENCRYPT_MODE,key);
47 byte[] encrypted = cpr.doFinal(msg.getBytes("UTF-8"));
48 String enctext = Base64.getEncoder().encodeToString(encrypted);
49
50 cpr.init(Cipher.DECRYPT_MODE,key);
51 byte[] decrypted = cpr.doFinal(Base64.getDecoder().decode(enctext));
52 String dectext = new String(decrypted,"UTF-8");
53
54 System.out.println("encrypted : "+enctext);
55 System.out.println("decrypted : "+dectext);
56 }
57}