· 6 years ago · May 14, 2019, 01:40 PM
1/*
2 * You need to install
3 * Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files
4 * for using 256-bit key
5 */
6
7import java.util.Arrays;
8import java.util.Base64;
9import javax.crypto.Cipher;
10import javax.crypto.spec.IvParameterSpec;
11import javax.crypto.spec.SecretKeySpec;
12// import javax.xml.bind.DatatypeConverter;
13
14public class AES256Test {
15 private String encrypt(String clearText, String secretKey, String initVector) {
16 try {
17 byte[] bytePass = secretKey.getBytes("utf-8");
18 byte[] byteV = initVector.getBytes("utf-8");
19
20 byte[] byteKey = Arrays.copyOf(bytePass, 32);
21 byte[] byteIV = Arrays.copyOf(byteV, 16);
22 // System.out.println(DatatypeConverter.printHexBinary(byteKey));
23 // System.out.println(DatatypeConverter.printHexBinary(byteIV));
24
25 SecretKeySpec skeySpec = new SecretKeySpec(byteKey, "AES");
26 IvParameterSpec ivSpec = new IvParameterSpec(byteIV);
27
28 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
29 cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivSpec);
30
31 byte[] byteText = clearText.getBytes("utf-8");
32 byte[] buf = cipher.doFinal(byteText);
33
34 byte[] byteBase64 = Base64.getEncoder().encode(buf);
35 String data = new String(byteBase64);
36
37 return data;
38 }
39 catch(Exception ex) {
40 return ex.getMessage();
41 }
42 }
43
44 private String decrypt(String data, String secretKey, String initVector) {
45 try {
46 byte[] byteData = Base64.getDecoder().decode(data.getBytes("utf-8"));
47 byte[] bytePass = secretKey.getBytes("utf-8");
48 byte[] byteV = initVector.getBytes("utf-8");
49
50 byte[] byteKey = Arrays.copyOf(bytePass, 32);
51 byte[] byteIV = Arrays.copyOf(byteV, 16);
52
53 SecretKeySpec skeySpec = new SecretKeySpec(byteKey, "AES");
54 IvParameterSpec ivSpec = new IvParameterSpec(byteIV);
55
56 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
57 cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivSpec);
58
59 byte[] byteText = cipher.doFinal(byteData);
60 String clearText = new String(byteText);
61
62 return clearText;
63 }
64 catch(Exception ex) {
65 return ex.getMessage();
66 }
67 }
68
69 public static void main(String[] args) {
70 String clearText = "hello";
71 String secretKey = "TheBestSecretKey";
72 String initVector = "1234567890abcdef";
73
74 String data = new AES256Test().encrypt(clearText, secretKey, initVector);
75 clearText = new AES256Test().decrypt(data, secretKey, initVector);
76
77 System.out.println("Encrypted String: " + data);
78 System.out.println("Decrypted: " + clearText);
79 }
80}