C# 中 virtual 属性 的行为
The behavior of virtual property in C#
我有下一个代码:
FileStream fs = new FileStream("test.crp",FileMode.Create);
Aes aes = Aes.Create();
FileStream fsKeys = new FileStream("keys.key",FileMode.Open);
fsKeys.Read(aes.IV,0,16);
fsKeys.Read(aes.Key,0,32);
fsKeys.Close();
问题是:aes.IV 和 aes.Key 在从文件读取操作期间没有改变。
而且我只能使用赋值运算符为它们分配一个新值:
byte [] iv = new byte[16];
byte [] key = new byte[32];
aes.IV = iv;
aes.Key = key;
这是正确的行为吗?
如果是这样,那么当我使用 fs.Read 时,我读取了哪个内存块?
这是因为 Aes.IV
和 Aes.Key
正在返回其成员变量的 "cloned" 字节数组。
fsKeys.Read(aes.IV,0,16);
修改的是克隆的IV数组,不是aes.IV
后面的成员变量。
您可以在这里查看源代码:
https://referencesource.microsoft.com/#mscorlib/system/security/cryptography/symmetricalgorithm.cs,97c6f2476150a40d
我有下一个代码:
FileStream fs = new FileStream("test.crp",FileMode.Create);
Aes aes = Aes.Create();
FileStream fsKeys = new FileStream("keys.key",FileMode.Open);
fsKeys.Read(aes.IV,0,16);
fsKeys.Read(aes.Key,0,32);
fsKeys.Close();
问题是:aes.IV 和 aes.Key 在从文件读取操作期间没有改变。
而且我只能使用赋值运算符为它们分配一个新值:
byte [] iv = new byte[16];
byte [] key = new byte[32];
aes.IV = iv;
aes.Key = key;
这是正确的行为吗? 如果是这样,那么当我使用 fs.Read 时,我读取了哪个内存块?
这是因为 Aes.IV
和 Aes.Key
正在返回其成员变量的 "cloned" 字节数组。
fsKeys.Read(aes.IV,0,16);
修改的是克隆的IV数组,不是aes.IV
后面的成员变量。
您可以在这里查看源代码: https://referencesource.microsoft.com/#mscorlib/system/security/cryptography/symmetricalgorithm.cs,97c6f2476150a40d