import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class AESUtils { private static int ENCRYPTION_BITS = 128; public static String encryptMessage(String message, String secretKey) { try { Cipher aesCipher = Cipher.getInstance("AES"); aesCipher.init(Cipher.ENCRYPT_MODE, createSecretKeyFromString(secretKey)); byte[] encryptedBytes = aesCipher.doFinal(message.getBytes()); return Base64.encodeBase64String(encryptedBytes); } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } } private static SecretKey createSecretKeyFromString(String secretKey) { byte[] d = Base64.decodeBase64(secretKey); SecretKey key = new SecretKeySpec(d, 0, d.length, "AES"); return key; } } import org.apache.commons.lang3.time.DateFormatUtils; import java.util.Date; public class TokenGenerator { private static final String CONDENSED_DATE_FORMAT = "yyyyMMddHHmmssSSSZ"; public static void main(String [] args){ if(args.length ==4){ System.out.println(generateToken(args[0],args[1],Integer.parseInt(args[2]),Integer.parseInt(args[3]))); }else{ System.out.println("Please pass following parameters"); System.out.println("tokenId nsecretKey nuses nttl"); } } public static String generateToken(String tokenId, String secretKey,int uses, int ttl) { StringBuilder s = new StringBuilder(); s.append("d="); s.append(DateFormatUtils.format(new Date(), CONDENSED_DATE_FORMAT)); s.append(";"); s.append("c="+uses); s.append(";"); s.append("t="+uses); String payload = s.toString(); System.out.println("payload", payload); return tokenId + ":" + AESUtils.encryptMessage(payload, secretKey); } } String secretKey = 'xxxxxxxxxxxxxxxxxxxxxx=='; String tokenId = 'xxxxxxxxxxxx'; Datetime d = System.now(); String payload = 'd='+d.format('yyyyMMddHHmmssSSSZ')+';c='+10+';t='+10; system.debug('payload' + payload); String message = tokenId + ':' + encryptMessage(payload, secretKey); public static string encryptMessage(String message, String secretKey){ Blob key = EncodingUtil.base64Decode(secretKey); Blob data = Blob.valueOf(message); Blob encrypted = Crypto.encryptWithManagedIV('AES128', key, data); return EncodingUtil.base64Encode(encrypted); }