· 5 years ago · Oct 16, 2020, 02:40 PM
1 import java.security.SecureRandom;
2 import javax.crypto.Cipher;
3 import javax.crypto.KeyGenerator;
4 import javax.crypto.SecretKey;
5 import javax.crypto.spec.SecretKeySpec;
6
7 public class SimpleCrypto {
8
9public String encrypt(String seed, String cleartext) throws Exception {
10 byte[] rawKey = getRawKey(seed.getBytes());
11 byte[] result = encrypt(rawKey, cleartext.getBytes());
12 return toHex(result);
13}
14
15public String decrypt(String seed, String encrypted) throws Exception {
16 byte[] rawKey = getRawKey(seed.getBytes());
17 byte[] enc = toByte(encrypted);
18 byte[] result = decrypt(rawKey, enc);
19 return new String(result);
20}
21
22//done
23private byte[] getRawKey(byte[] seed) throws Exception {
24 KeyGenerator kgen = KeyGenerator.getInstance("AES");
25 SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
26 sr.setSeed(seed);
27 kgen.init(128, sr); // 192 and 256 bits may not be available
28 SecretKey skey = kgen.generateKey();
29 byte[] raw = skey.getEncoded();
30 return raw;
31}
32
33
34private byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
35 SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
36 Cipher cipher = Cipher.getInstance("AES");
37 cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
38 byte[] encrypted = cipher.doFinal(clear);
39 return encrypted;
40}
41
42private byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
43 SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
44 Cipher cipher = Cipher.getInstance("AES");
45 cipher.init(Cipher.DECRYPT_MODE, skeySpec);
46 byte[] decrypted = cipher.doFinal(encrypted);
47 return decrypted;
48}
49
50public String toHex(String txt) {
51 return toHex(txt.getBytes());
52}
53public String fromHex(String hex) {
54 return new String(toByte(hex));
55}
56
57public byte[] toByte(String hexString) {
58 int len = hexString.length()/2;
59 byte[] result = new byte[len];
60 for (int i = 0; i < len; i++)
61 result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue();
62 return result;
63}
64
65public String toHex(byte[] buf) {
66 if (buf == null)
67 return "";
68 StringBuffer result = new StringBuffer(2*buf.length);
69 for (int i = 0; i < buf.length; i++) {
70 appendHex(result, buf[i]);
71 }
72 return result.toString();
73}
74private final static String HEX = "0123456789ABCDEF";
75private void appendHex(StringBuffer sb, byte b) {
76 sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));
77}
78
79 }
80