我使用此示例代码:https://msdn.microsoft.com/en-us/library/system.security.cryptography.aesmanaged.aspx
AESCryptor是我自己的类,带有上面msdn链接的原始代码。它只是包装了Decrypt / encrypt方法。
这就是我如何调用解密/加密方法:
string plainText1 = "This is my sample plain text";
string plainText2 = "This is my sample plain text";
// Create a new instance of the AesManaged
// class. This generates a new key and initialization
// vector (IV).
using (AesManaged myAes = new AesManaged())
{
// Encrypt the string to an array of bytes.
byte[] encrypted = AESCryptor.EncryptStringToBytes_Aes(plainText1, myAes.Key, myAes.IV);
byte[] encrypted2 = AESCryptor.EncryptStringToBytes_Aes(plainText2, myAes.Key, myAes.IV);
}
我期望的结果是,(加密和加密的)2字节数组当然具有相同的长度,但却充满了"零"所以当我用Base64对byte []进行编码时,我得到了不同的字符串。
我该怎么做?设置myAes.Padding = PaddingMode.Zeros;
没有帮助。
答案 0 :(得分:2)
为了获得相同密钥和明文的不同结果,您需要使用不同的IV。
从表面上看,要使用单个AesManaged
实例执行此操作,您需要在两次加密调用之间调用myAes.GenerateIV()
。
如果您创建新 AesManaged
,则会免费获得新键和新 IV,这也可能是实现你想要的。
不要忘记记录您的密钥和IV,因为如果没有密码和IV,您将无法解密。