代码之家  ›  专栏  ›  技术社区  ›  Rassul Yunussov

C中虚拟财产的行为#

  •  1
  • Rassul Yunussov  · 技术社区  · 8 年前

    我有下一个代码:

    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时,我应该读取到哪个内存块。阅读

    1 回复  |  直到 8 年前
        1
  •  1
  •   Mike Mat    8 年前

    那是因为 Aes.IV Aes.Key 正在返回其成员变量的“克隆”字节数组。

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

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