2

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

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包含所有零。

这当然不像文档所暗示的那样随机。

4

1 回答 1

3

查看SymmetricAlgorithm(的基类TripleDES),该IV属性返回当前 IV 字节数组的克隆,因此rngProvider.GetBytes()在克隆数组上设置字节,而不是实际的。

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

于 2020-03-05T20:03:22.190 回答