我在網上找到了this article並實現了它的修改版本。AESManaged爲相同的密鑰/ iv組合返回不同的加密值
public static byte[] Encrypt(byte[] input, byte[] iv)
{
var aes = new AesManaged();
aes.Key = StringToByteArray("abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890");
aes.IV = StringToByteArray("00010001000000000000000000000000");
aes.KeySize = 128;
var encryptor = aes.CreateEncryptor();
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
cs.Write(input, 0, input.Length);
cs.Close();
}
return ms.ToArray();
}
}
public static byte[] StringToByteArray(string hex)
{
var NumberChars = hex.Length;
var bytes = new byte[NumberChars/2];
for (var i = 0; i < NumberChars; i += 2)
bytes[i/2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
現在我的問題是,我在這裏提供相同的IV和密鑰(顯然只是用於測試,在生產中我改變了我每次加密IV),但它每次都返回不同的加密字節我加密相同的輸入。
我查找了一些帖子,他們說輸出應該是特定的鍵/ iv組合相同。我在這裏錯過了什麼嗎?
編輯:
[TestMethod]
public void Encryption_returns_same_value_for_same_key_and_iv()
{
const string input = "my input";
var bytes = Encoding.UTF32.GetBytes(input);
var result = EncryptionManager.Encrypt(bytes, bytes);
var result2 = EncryptionManager.Encrypt(bytes, bytes);
Assert.AreEqual(result, result2);
}
這是如何我調用加密方法
你可以在控制檯上打印'aes.Mode'和'aes.Padding'來查看'AesManaged()'類默認使用哪種操作模式?隨機化/填充可能發生。 –
無法複製:http://ideone.com/teoqkr –
@ArtjomB。愛那個無所事事的人。我現在更加困惑 – SZT