我在网上找到this article并实施了它的修改版本。
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);
}
这就是我调用加密方法的方法
答案 0 :(得分:1)
因此经过一些讨论后,问题实际上是代码的一部分,这里没有显示。实际上,上面的原始代码总是给出相同的结果,并且单元测试应该已经通过(在断言上另外使用# This is just for illustration purpose I have no
# knowledge how the original plot was created
import numpy as np
import pylab as plt
fig, ax = plt.subplots(2, 3, sharex=True)
x = np.arange(0, 5, 0.1)
n = 0
for i in xrange(2):
for j in xrange(3):
y = x ** n
ax[i, j].plot(x, y)
n += 1
# My real work starts here
axes = fig.get_axes()
print axes
plt.show()
)。但是,在设置密钥后,代码(由某些同事)更改了SequenceEqual
,如下所示:
aes.KeySize
但是,正如我们在使用
设置aes.Key = StringToByteArray("abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890");
aes.IV = StringToByteArray("00010001000000000000000000000000");
aes.KeySize = 128;
属性后输出使用的密钥所发现的那样
KeySize
修改Console.WriteLine("Used Key for Encryption: " + BitConverter.ToString(aes.Key));
后,键会更改为随机密钥。这就是为什么我们不断得到不同的结果。用于使用相同的输入向量调用函数的示例输出:
用于加密的密钥:C7-35-58-42-3A-2A-79-DE-0D-09-78-20-34-90-1F-EC
密文:E4-AA-A3-3B-01-CF-F0-C1-07-9A-0B-73-3E-70-C9-8A用于加密的密钥:8A-95-E7-26-60-F9-CE-66-BA-A4-DE-D2-FA-70-AC-DE
密文:C5-E7-D3-32-38-21-54-25-86-61-70-CB-94-46-A6-37用于加密的密钥:A4-D7-01-8F-35-2B-7F-2D-E6-0A-A9-7F-95-42-71-D6
密文:F1-B2-75-64-D1-90-75-32-0D-CB-D9-AE-11-AE-DB-DD
首先设置KeySize
然后设置KeySize
属性本身即可解决问题。