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