1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package ch.elca.el4j.services.security.encryption;
18
19 import java.util.Arrays;
20
21 import javax.crypto.Cipher;
22 import javax.crypto.KeyGenerator;
23 import javax.crypto.SecretKey;
24 import javax.crypto.spec.SecretKeySpec;
25
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28
29 import org.apache.commons.codec.binary.Base64;
30
31
32
33
34
35
36
37
38
39 public class AESCipher {
40
41
42
43 private static final String PREFIX = "{AES-128}";
44
45
46
47
48 private static Logger s_logger = LoggerFactory.getLogger(AESCipher.class);
49
50
51
52
53 private Cipher m_cipherEncypt;
54
55
56
57
58 private Cipher m_cipherDecypt;
59
60
61
62
63 public AESCipher(String base64encodedKey) {
64 try {
65 byte[] key = Base64.decodeBase64(base64encodedKey.getBytes());
66 SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
67
68 m_cipherEncypt = Cipher.getInstance("AES");
69 m_cipherEncypt.init(Cipher.ENCRYPT_MODE, skeySpec);
70
71 m_cipherDecypt = Cipher.getInstance("AES");
72 m_cipherDecypt.init(Cipher.DECRYPT_MODE, skeySpec);
73 } catch (Exception e) {
74 s_logger.error("Error creating AESCipher", e);
75 }
76 }
77
78
79
80
81
82 public String encrypt(String plainText) {
83 try {
84 return PREFIX + new String(Base64.encodeBase64(m_cipherEncypt.doFinal(plainText.getBytes())));
85 } catch (Exception e) {
86 s_logger.error("Error while encrypting text", e);
87 return null;
88 }
89 }
90
91
92
93
94
95 public String decrypt(String encryptedText) {
96 try {
97 if (encryptedText.startsWith(PREFIX)) {
98 return new String(m_cipherDecypt.doFinal(
99 Base64.decodeBase64(encryptedText.substring(PREFIX.length()).getBytes())));
100 } else {
101 s_logger.error("Error while decrypting text: encyptedText does not start with " + PREFIX);
102 return encryptedText;
103 }
104 } catch (Exception e) {
105 s_logger.error("Error while decrypting text", e);
106 return null;
107 }
108 }
109
110
111
112
113
114 public static void main(String[] args) throws Exception {
115
116 KeyGenerator kgen = KeyGenerator.getInstance("AES");
117 kgen.init(128);
118
119
120 SecretKey skey = kgen.generateKey();
121 byte[] raw = skey.getEncoded();
122
123 System.out.println("Generated AES-128 key:" + Arrays.toString(Base64.encodeBase64(raw)));
124 }
125
126 }