C#中虚拟属性的行为

时间:2017-11-14 05:14:29

标签: c# properties virtual cryptostream

我有下一个代码:

app.get('/download/:id', function(req, res){
  var basic_id = req.params.id 
  var file = __dirname + '/uploads/BasicUserFile-'+ basic_id+ ".jpg";
  res.download(file); 
});

问题在于:aes.IV和aes.Key在从文件读取操作期间不会更改。

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

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();

这是一种正确的行为吗? 如果是这样,那么当我使用fs.Read时,我会读到什么内存块?

1 个答案:

答案 0 :(得分:1)

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

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

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