diffie_md5_blowfish.java
68 linesjava
DOWNLOAD
1// Aim: Program to perform Blowfish encryption with Diffie-Hellman key exchange and MD5 hash (Blowfish with Diffie-Hellman Key Exchange and MD5 Hash).
2import javax.crypto.*;
3import javax.crypto.spec.*;
4import java.util.*;
5import java.math.BigInteger;
6import java.security.MessageDigest;
7
8public class diffie_md5_blowfish {
9    public static void main(String[] args) throws Exception {
10        //diffie hellman
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 key mismatch");
27            return;
28        }
29
30        //blowfish keyy
31        byte[] keyBytes = Arrays.copyOf(kA.toByteArray(),16);
32        SecretKey key = new SecretKeySpec(keyBytes, "Blowfish");
33        
34        //blowfish encryption
35        System.out.print("Enter message : ");
36        sc.nextLine();
37        String msg = sc.nextLine();
38        sc.close();
39
40        Cipher cpr = Cipher.getInstance("Blowfish/ECB/PKCS5Padding");
41        cpr.init(Cipher.ENCRYPT_MODE, key);
42        byte[] encrypted = cpr.doFinal(msg.getBytes("UTF-8"));
43        String enctext = Base64.getEncoder().encodeToString(encrypted);
44
45        cpr.init(Cipher.DECRYPT_MODE, key);
46        byte[] decrypted = cpr.doFinal(Base64.getDecoder().decode(enctext));
47        String dectext = new String(decrypted, "UTF-8");
48
49        System.out.println("Shared Secret Key: " + kA);
50        System.out.println("Blowfish key : "+Base64.getEncoder().encodeToString(keyBytes));
51
52        System.out.println("Encrypted: " + enctext);
53        System.out.println("Decrypted: " + dectext);
54
55        //md5 integrityyyy
56        MessageDigest m = MessageDigest.getInstance("MD5");
57        byte[] digest = m.digest(msg.getBytes());
58        System.out.println("MD5 :"+Base64.getEncoder().encodeToString(digest));
59        StringBuilder hex = new StringBuilder();
60        for(byte b : digest){
61            String h =String.format("%2x",b);
62            hex.append(h);
63        }
64        System.out.println("hex :"+hex);
65
66    }
67}
68