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。在从文件读取操作期间不会更改密钥。

我只能使用赋值运算符为它们分配一个新值:

 byte [] iv = new byte[16];
 byte [] key = new byte[32];
 aes.IV = iv;
 aes.Key = key;

这是正确的行为吗?如果是这样,那么当我使用 fs 时,我读取到哪个内存块。读?

这是因为Aes.IVAes.Key返回其成员变量的"克隆"字节数组。

通过fsKeys.Read(aes.IV,0,16);,您正在修改克隆的 IV 数组,而不是 aes.IV 后面的成员变量。

您可以在此处查看源代码:https://referencesource.microsoft.com/#mscorlib/system/security/cryptography/symmetricalgorithm.cs,97c6f2476150a40d

相关内容

  • 没有找到相关文章

最新更新