· 9 years ago · Nov 08, 2016, 08:38 AM
1import org.apache.commons.codec.binary.Base64;
2
3import javax.crypto.Cipher;
4import javax.crypto.KeyGenerator;
5import javax.crypto.SecretKey;
6import javax.crypto.spec.SecretKeySpec;
7
8
9public class AESUtils {
10 private static int ENCRYPTION_BITS = 128;
11
12
13 public static String encryptMessage(String message, String secretKey) {
14 try {
15 Cipher aesCipher = Cipher.getInstance("AES");
16 aesCipher.init(Cipher.ENCRYPT_MODE, createSecretKeyFromString(secretKey));
17
18 byte[] encryptedBytes = aesCipher.doFinal(message.getBytes());
19
20 return Base64.encodeBase64String(encryptedBytes);
21 } catch (Exception e) {
22 throw new RuntimeException(e.getMessage(), e);
23 }
24 }
25
26
27 private static SecretKey createSecretKeyFromString(String secretKey) {
28 byte[] d = Base64.decodeBase64(secretKey);
29 SecretKey key = new SecretKeySpec(d, 0, d.length, "AES");
30 return key;
31 }
32}
33
34import org.apache.commons.lang3.time.DateFormatUtils;
35
36import java.util.Date;
37
38public class TokenGenerator {
39 private static final String CONDENSED_DATE_FORMAT = "yyyyMMddHHmmssSSSZ";
40 public static void main(String [] args){
41
42 if(args.length ==4){
43 System.out.println(generateToken(args[0],args[1],Integer.parseInt(args[2]),Integer.parseInt(args[3])));
44 }else{
45 System.out.println("Please pass following parameters");
46 System.out.println("tokenId nsecretKey nuses nttl");
47 }
48
49
50 }
51
52 public static String generateToken(String tokenId, String secretKey,int uses, int ttl) {
53 StringBuilder s = new StringBuilder();
54 s.append("d=");
55 s.append(DateFormatUtils.format(new Date(), CONDENSED_DATE_FORMAT));
56 s.append(";");
57 s.append("c="+uses);
58 s.append(";");
59 s.append("t="+uses);
60
61 String payload = s.toString();
62 System.out.println("payload", payload);
63 return tokenId + ":" + AESUtils.encryptMessage(payload, secretKey);
64 }
65}
66
67String secretKey = 'xxxxxxxxxxxxxxxxxxxxxx==';
68 String tokenId = 'xxxxxxxxxxxx';
69 Datetime d = System.now();
70 String payload = 'd='+d.format('yyyyMMddHHmmssSSSZ')+';c='+10+';t='+10;
71 system.debug('payload' + payload);
72 String message = tokenId + ':' + encryptMessage(payload, secretKey);
73
74 public static string encryptMessage(String message, String secretKey){
75 Blob key = EncodingUtil.base64Decode(secretKey);
76 Blob data = Blob.valueOf(message);
77 Blob encrypted = Crypto.encryptWithManagedIV('AES128', key, data);
78 return EncodingUtil.base64Encode(encrypted);
79 }