AES的key需要到开放平台去找到密钥类型为AES的终端号,先保存在上传,具体路径如下:
首页->用户中心->信息设置->安全证书管理
java版本
/*** 密钥算法*/private static final String KEY_ALGORITHM = "AES";/*** 加密/解密算法 / 工作模式 / 填充方式* PKCS5Padding填充方式*/private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";private static final String IV_STRING = "DEVICE-AES000000";/*** 使用AES算法进行加密* @param source 加密源* @param key 秘钥-可在新颜开放平台获取,**详见:常见问题FAQ-AES加密密钥如何获取*** @return 密文*/public static String encrypt(String source, String key){try {if (key == null || "".equals(source)) {return null;}byte[] keyBytes = key.getBytes();SecretKeySpec skeySpec = new SecretKeySpec(keyBytes, KEY_ALGORITHM);byte[] initParam = IV_STRING.getBytes();IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam);Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, skeySpec,ivParameterSpec);byte[] encrypted = cipher.doFinal(source.getBytes(Charset.forName("UTF-8")));return Base64.encode(encrypted);} catch (Exception e) {log.warn("encrypt Exception source {}, key {}",source,key);return null;}}/*** AES算法解密* @param source 密文* @param key 秘钥-可在新颜开放平台获取,**详见:常见问题FAQ-AES加密密钥如何获取*** @return 明文*/public static String decrypt(String source, String key) {try {if (key == null || "".equals(source)) {return null;}byte[] keyBytes =key.getBytes();SecretKeySpec skeySpec = new SecretKeySpec(keyBytes, KEY_ALGORITHM);byte[] initParam = IV_STRING.getBytes();IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam);Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);cipher.init(Cipher.DECRYPT_MODE,skeySpec,ivParameterSpec);byte[] sourceBytes = new BASE64Decoder().decodeBuffer(source);byte[] original = cipher.doFinal(sourceBytes);return new String(original,Charset.forName("UTF-8"));} catch (Exception e) {log.error("decrypt Exception source {}, key {}",source,key);return null;}}
PHP版本 $IV=”DEVICE-AES000000”
/*** AES/CBC/PKCS5Padding Encrypter** @param $str* @param $key* @param $iv* @return string*/function encryptNew($str, $key,$iv){return base64_encode(openssl_encrypt($str, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv));}/*** AES/CBC/PKCS5Padding Decrypter** @param $encryptedStr* @param $key* @param $iv* @return string*/function decryptNew($encryptedStr,$key,$iv){return openssl_decrypt(base64_decode($encryptedStr), 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);}
C#版本 IV=”DEVICE-AES000000”
/*** 加密*/public static string Encrypt(string toEncrypt, string key, string iv){byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);byte[] ivArray = UTF8Encoding.UTF8.GetBytes(iv);byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);RijndaelManaged rDel = new RijndaelManaged();rDel.Key = keyArray;rDel.IV = ivArray;rDel.Mode = CipherMode.CBC;rDel.Padding = PaddingMode.PKCS7;ICryptoTransform cTransform = rDel.CreateEncryptor();byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);return Convert.ToBase64String(resultArray, 0, resultArray.Length);}/*** 解密*/public static string Decrypt(string toDecrypt, string key, string iv){byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);byte[] ivArray = UTF8Encoding.UTF8.GetBytes(iv);byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);RijndaelManaged rDel = new RijndaelManaged();rDel.Key = keyArray;rDel.IV = ivArray;rDel.Mode = CipherMode.CBC;rDel.Padding = PaddingMode.PKCS7;ICryptoTransform cTransform = rDel.CreateDecryptor();byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);return UTF8Encoding.UTF8.GetString(resultArray);}
文档更新时间: 2019-06-17 17:52 作者:support