RNGCryptoServiceProvider.GetBytes() returns 全零

RNGCryptoServiceProvider.GetBytes() returns all zeros

我正在使用以下代码生成加密盐。

TripleDES tripleDES = TripleDES.Create()
tripleDES.IV = new byte[8];

using (RNGCryptoServiceProvider rngProvider = new RNGCryptoServiceProvider())
{
    rngProvider.GetBytes(tripleDES.IV);
}

Rfc2898DeriveBytes keyBytes = new Rfc2898DeriveBytes(Password, tripleDES.IV);
tripleDES.Key = keyBytes.GetBytes(16);

但是在调用 GetBytes() 之后,我可以看到 tripleDES.IV 包含全零。

这肯定不像文档所暗示的那样随机。

查看 the source for SymmetricAlgorithmTripleDES 的基础 class),IV 属性 returns 当前 IV 的克隆字节数组,所以 rngProvider.GetBytes() 是在克隆数组上设置字节,而不是实际数组。

无论如何您都不需要将 IV 设置为随机值 - 它会在调用 TripleDES.Create() 后被初始化为一个值。如果你出于某种原因想要一个新的,你可以调用 GenerateIV()IV 设置为一个新的随机值。