AES的key需要到开放平台去找到密钥类型为AES的终端号,先保存在上传,具体路径如下:
首页->用户中心->信息设置->安全证书管理

java版本

  1. /**
  2. * 密钥算法
  3. */
  4. private static final String KEY_ALGORITHM = "AES";
  5. /**
  6. * 加密/解密算法 / 工作模式 / 填充方式
  7. * PKCS5Padding填充方式
  8. */
  9. private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";
  10. private static final String IV_STRING = "DEVICE-AES000000";
  11. /**
  12. * 使用AES算法进行加密
  13. * @param source 加密源
  14. * @param key 秘钥-可在新颜开放平台获取,**详见:常见问题FAQ-AES加密密钥如何获取**
  15. * @return 密文
  16. */
  17. public static String encrypt(String source, String key){
  18. try {
  19. if (key == null || "".equals(source)) {
  20. return null;
  21. }
  22. byte[] keyBytes = key.getBytes();
  23. SecretKeySpec skeySpec = new SecretKeySpec(keyBytes, KEY_ALGORITHM);
  24. byte[] initParam = IV_STRING.getBytes();
  25. IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam);
  26. Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
  27. cipher.init(Cipher.ENCRYPT_MODE, skeySpec,ivParameterSpec);
  28. byte[] encrypted = cipher.doFinal(source.getBytes(Charset.forName("UTF-8")));
  29. return Base64.encode(encrypted);
  30. } catch (Exception e) {
  31. log.warn("encrypt Exception source {}, key {}",source,key);
  32. return null;
  33. }
  34. }
  35. /**
  36. * AES算法解密
  37. * @param source 密文
  38. * @param key 秘钥-可在新颜开放平台获取,**详见:常见问题FAQ-AES加密密钥如何获取**
  39. * @return 明文
  40. */
  41. public static String decrypt(String source, String key) {
  42. try {
  43. if (key == null || "".equals(source)) {
  44. return null;
  45. }
  46. byte[] keyBytes =key.getBytes();
  47. SecretKeySpec skeySpec = new SecretKeySpec(keyBytes, KEY_ALGORITHM);
  48. byte[] initParam = IV_STRING.getBytes();
  49. IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam);
  50. Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
  51. cipher.init(Cipher.DECRYPT_MODE,skeySpec,ivParameterSpec);
  52. byte[] sourceBytes = new BASE64Decoder().decodeBuffer(source);
  53. byte[] original = cipher.doFinal(sourceBytes);
  54. return new String(original,Charset.forName("UTF-8"));
  55. } catch (Exception e) {
  56. log.error("decrypt Exception source {}, key {}",source,key);
  57. return null;
  58. }
  59. }

PHP版本 $IV=”DEVICE-AES000000”

  1. /**
  2. * AES/CBC/PKCS5Padding Encrypter
  3. *
  4. * @param $str
  5. * @param $key
  6. * @param $iv
  7. * @return string
  8. */
  9. function encryptNew($str, $key,$iv)
  10. {
  11. return base64_encode(openssl_encrypt($str, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv));
  12. }
  13. /**
  14. * AES/CBC/PKCS5Padding Decrypter
  15. *
  16. * @param $encryptedStr
  17. * @param $key
  18. * @param $iv
  19. * @return string
  20. */
  21. function decryptNew($encryptedStr,$key,$iv)
  22. {
  23. return openssl_decrypt(base64_decode($encryptedStr), 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
  24. }

C#版本 IV=”DEVICE-AES000000”

  1. /**
  2. * 加密
  3. */
  4. public static string Encrypt(string toEncrypt, string key, string iv)
  5. {
  6. byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
  7. byte[] ivArray = UTF8Encoding.UTF8.GetBytes(iv);
  8. byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
  9. RijndaelManaged rDel = new RijndaelManaged();
  10. rDel.Key = keyArray;
  11. rDel.IV = ivArray;
  12. rDel.Mode = CipherMode.CBC;
  13. rDel.Padding = PaddingMode.PKCS7;
  14. ICryptoTransform cTransform = rDel.CreateEncryptor();
  15. byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
  16. return Convert.ToBase64String(resultArray, 0, resultArray.Length);
  17. }
  18. /**
  19. * 解密
  20. */
  21. public static string Decrypt(string toDecrypt, string key, string iv)
  22. {
  23. byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
  24. byte[] ivArray = UTF8Encoding.UTF8.GetBytes(iv);
  25. byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);
  26. RijndaelManaged rDel = new RijndaelManaged();
  27. rDel.Key = keyArray;
  28. rDel.IV = ivArray;
  29. rDel.Mode = CipherMode.CBC;
  30. rDel.Padding = PaddingMode.PKCS7;
  31. ICryptoTransform cTransform = rDel.CreateDecryptor();
  32. byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
  33. return UTF8Encoding.UTF8.GetString(resultArray);
  34. }
文档更新时间: 2019-06-17 17:52   作者:support