· 7 years ago · Nov 06, 2018, 01:06 PM
1package protokol_dhl;
2import java.security.KeyFactory;
3import java.security.KeyPair;
4import java.security.KeyPairGenerator;
5import java.security.NoSuchAlgorithmException;
6import java.security.PrivateKey;
7import java.security.PublicKey;
8import java.security.SecureRandom;
9import java.util.Scanner;
10import java.io.UnsupportedEncodingException;
11import java.math.BigInteger;
12import java.security.MessageDigest;
13import java.security.NoSuchAlgorithmException;
14import java.util.Arrays;
15import java.util.Base64;
16
17import javax.crypto.Cipher;
18import javax.crypto.KeyAgreement;
19import javax.crypto.spec.DHParameterSpec;
20import javax.crypto.spec.DHPublicKeySpec;
21import javax.crypto.spec.SecretKeySpec;
22
23import javax.crypto.Cipher;
24public class Message {
25
26 private PrivateKey privateKey;
27 private PublicKey publicKey;
28 private PublicKey receivedPublicKey;
29 private byte[] secretKey;
30 private String secretMessage;
31
32 public Message() {};
33 public void generateKeys()
34 {
35 try {
36 final KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DH");
37 keyPairGenerator.initialize(1024);
38 final KeyPair keyPair = keyPairGenerator.generateKeyPair();
39 privateKey = keyPair.getPrivate();
40 publicKey = keyPair.getPublic();
41 } catch (Exception e) {
42 e.printStackTrace();
43 }
44 }
45 public void generateCommonSecretKey() {
46
47 try {
48 final KeyAgreement keyAgreement = KeyAgreement.getInstance("DH");
49 keyAgreement.init(privateKey);
50 keyAgreement.doPhase(receivedPublicKey, true);
51
52 secretKey = shortenSecretKey(keyAgreement.generateSecret());
53 } catch (Exception e) {
54 e.printStackTrace();
55 }
56 }
57 private byte[] shortenSecretKey(final byte[] longKey) {
58
59 try {
60 final byte[] shortenedKey = new byte[8];
61 System.arraycopy(longKey, 0, shortenedKey, 0, shortenedKey.length);
62 return shortenedKey;
63 } catch (Exception e) {
64 e.printStackTrace();
65 }
66
67 return null;
68 }
69
70 public void encrypMessage( String message, Message mess)
71 {
72 try {
73 SecretKeySpec keySpec = new SecretKeySpec(secretKey, "DES");
74 Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
75 cipher.init(Cipher.ENCRYPT_MODE, keySpec);
76 byte[] encryptedMessage = cipher.doFinal(message.getBytes());
77 mess.DecryptMessage(encryptedMessage);
78
79 } catch (Exception e) {
80 e.printStackTrace();
81 }
82 }
83 public void DecryptMessage( byte[] message)
84 {
85 try {
86 SecretKeySpec keySpec = new SecretKeySpec(secretKey, "DES");
87 Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
88 cipher.init(Cipher.DECRYPT_MODE, keySpec);
89 secretMessage = new String(cipher.doFinal(message));
90
91 } catch (Exception e) {
92 e.printStackTrace();
93 }
94
95 }
96 public void receivePublicKeyFrom(Message mes) {
97
98 receivedPublicKey = mes.getPublicKey();
99 }
100
101 public PublicKey getPublicKey()
102 {
103 return publicKey;
104 }
105 public void whisperTheSecretMessage() {
106
107 System.out.println(secretMessage);
108 }
109
110 // sign the messagec
111 public static String MessageText()
112 {
113 Scanner skaner=new Scanner(System.in);
114 String message= skaner.nextLine();
115 return message;
116 }
117
118
119}