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 SymmetricAlgorithm
(TripleDES
的基础 class),IV
属性 returns 当前 IV 的克隆字节数组,所以 rngProvider.GetBytes()
是在克隆数组上设置字节,而不是实际数组。
无论如何您都不需要将 IV 设置为随机值 - 它会在调用 TripleDES.Create()
后被初始化为一个值。如果你出于某种原因想要一个新的,你可以调用 GenerateIV()
将 IV
设置为一个新的随机值。
我正在使用以下代码生成加密盐。
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 SymmetricAlgorithm
(TripleDES
的基础 class),IV
属性 returns 当前 IV 的克隆字节数组,所以 rngProvider.GetBytes()
是在克隆数组上设置字节,而不是实际数组。
无论如何您都不需要将 IV 设置为随机值 - 它会在调用 TripleDES.Create()
后被初始化为一个值。如果你出于某种原因想要一个新的,你可以调用 GenerateIV()
将 IV
设置为一个新的随机值。