Aes加密.少了一个重要的部分
本文关键字:重要的部 少了一个 加密 Aes | 更新日期: 2023-09-27 18:13:39
我在静态加密类中有一个方法,看起来像这样:
public static byte[] EncryptString(string toEncrypt, byte[] encryptionKey)
{
var toEncryptBytes = Encoding.UTF8.GetBytes(toEncrypt);
using (var provider = new AesCryptoServiceProvider())
{
provider.Key = encryptionKey;
provider.Mode = CipherMode.ECB;
provider.Padding = PaddingMode.ISO10126;
using (var encryptor = provider.CreateEncryptor(provider.Key, provider.IV))
{
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
cs.Write(toEncryptBytes, 0, toEncryptBytes.Length);
cs.FlushFinalBlock();
}
return ms.ToArray();
}
}
}
}
我有一个像这样的单元测试:
[TestMethod]
public void EncryptStringEncryptsTest()
{
var toEncrypt = "My text to encrypt";
var encryptionKey = Convert.FromBase64String("93mcgv9UBYpwgoUX0AXEaU1BqTCufPWPkFdOdoILLDA=");
var encrypted = Encryption.EncryptString(toEncrypt, encryptionKey);
var text = Convert.ToBase64String(encrypted);
Assert.IsTrue(false);
}
每次运行此命令时,text
值都会发生变化。我希望它是常数,给定相同的输入。是我的期望错了,还是我做错了什么?
你的假设是不正确的。
ISO10126填充将附加随机数据以填充您的消息到块大小的倍数。
您正在使用随机填充字节,根据ISO10126。因此,即使所有输入都相同,结果也不会每次都相同。