· 6 years ago · Apr 16, 2019, 04:54 PM
1import java.io.DataInputStream;
2import java.io.DataOutputStream;
3import java.io.IOException;
4import java.net.Socket;
5import java.net.UnknownHostException;
6import java.security.NoSuchAlgorithmException;
7import java.security.SecureRandom;
8import java.util.Base64;
9
10import javax.crypto.*;
11import javax.crypto.spec.IvParameterSpec;
12import javax.crypto.spec.SecretKeySpec;
13public class AES {
14 public final static String SERVER="127.0.0.1";
15 public static final int PORT=8088;
16
17 public static void main(String[] args) throws NoSuchAlgorithmException {
18
19 String plainText="Vaibhav Navnath Kumbhar";
20 try {
21 Socket soc=new Socket(SERVER, PORT);
22 System.out.println("Just connected to " + soc.getRemoteSocketAddress());
23
24 DataOutputStream out=new DataOutputStream(soc.getOutputStream());
25 DataInputStream in=new DataInputStream(soc.getInputStream());
26 //GENERATING KEYS
27 KeyGenerator keyGenerator=KeyGenerator.getInstance("AES");
28 keyGenerator.init(128);
29
30 SecretKey key=keyGenerator.generateKey();
31
32 // Generating IV.(INitializaion vector)/We are using CBC
33 byte[] IV = new byte[16];
34 SecureRandom random = new SecureRandom();
35 random.nextBytes(IV);
36
37 byte[] cipherText = encrypt(plainText.getBytes(),key, IV);
38 System.out.println("Plain Text: :"+plainText);
39 System.out.println("Encrypted Text : "+Base64.getEncoder().encodeToString(cipherText) );
40 String cipherString=Base64.getEncoder().encodeToString(cipherText);
41 System.out.println("Symmetric Key "+Base64.getEncoder().encodeToString(key.getEncoded()));
42 out.writeUTF(Base64.getEncoder().encodeToString(key.getEncoded())); //key
43 out.write(IV);
44 out.writeUTF(cipherString);
45
46
47
48 } catch (UnknownHostException e) {
49 e.printStackTrace();
50 } catch (IOException e) {
51 e.printStackTrace();
52 } catch (Exception e) {
53 // TODO Auto-generated catch block
54 e.printStackTrace();
55 }
56}
57
58
59 public static byte[] encrypt(byte[] plaintext, SecretKey key, byte[] IV) throws Exception{
60
61 //Get Cipher Instance
62 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
63
64 //Create SecretKeySpec
65 SecretKeySpec keySpec = new SecretKeySpec(key.getEncoded(), "AES");
66
67 //Create IvParameterSpec
68 IvParameterSpec ivSpec = new IvParameterSpec(IV);
69
70 //Initialize Cipher for ENCRYPT_MODE
71 cipher.init(Cipher.ENCRYPT_MODE, keySpec,ivSpec );
72
73 //Perform Encryption
74 byte[] cipherText = cipher.doFinal(plaintext);
75
76 return cipherText;
77
78 }
79
80 public static String decrypt (byte[] cipherText, SecretKey key,byte[] IV) throws Exception
81 {
82 //Get Cipher Instance
83 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
84
85 //Create SecretKeySpec
86 SecretKeySpec keySpec = new SecretKeySpec(key.getEncoded(), "AES");
87
88 //Create IvParameterSpec
89 IvParameterSpec ivSpec = new IvParameterSpec(IV);
90
91 //Initialize Cipher for DECRYPT_MODE
92 cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
93
94 //Perform Decryption
95 byte[] decryptedText = cipher.doFinal(cipherText);
96
97 return new String(decryptedText);
98 }
99}