des_with_diffie.java
57 linesjava
DOWNLOAD
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}