修改key的处理
//AES 加密
public string Encrypt(string encryptStr, string key)
{
byte[] toEncryptArray = Encoding.UTF8.GetBytes(encryptStr);
byte[] keyArray = null;
using (var sha1 = new SHA1CryptoServiceProvider())
{
byte[] hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(key));
var rd = sha1.ComputeHash(hash);
keyArray = rd.Take(16).ToArray();
}
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(resultArray);
}
这样加密出来的,就与java 的相同了
AES加密差一点配置都会使结果不同,调试接口的时候注意几点,ECB,PKCS7或PKCS5
还有就是key 的问题,跟java 方法对接的时候,需要处理一下。
解密方法
//AES 解密
public static string AESDecryptString(string decryptStr, string key)
{
//仔细观察可以发现,只有这里不同
byte[] toEncryptArray = Convert.FromBase64String(decryptStr);
byte[] keyArray = null;
using (var sha1 = new SHA1CryptoServiceProvider())
{
byte[] hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(key));
var rd = sha1.ComputeHash(hash);
keyArray = rd.Take(16).ToArray();
}
RijndaelManaged rm = new RijndaelManaged
{
Key = keyArray,
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = rm.CreateDecryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
string result = Encoding.UTF8.GetString(resultArray);
return result;
}
如果你仔细观察加密解密可以发现,他们的不同之处是 toEncryptArray 的处理