C# RNGCryptoServiceProvider GetBytes(大字节数组)与循环 GetBytes(1 字节)
C# RNGCryptoServiceProvider GetBytes(large byte array) vs looping GetBytes(1 byte)
我想知道以下各项在安全性方面是否存在差异:
案例 A:
byte[] data = new byte[47];
using(RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider())
{
crypto.GetBytes(data);
}
案例 B:
byte[] data = new byte[47];
using(RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider())
{
for(int i = 0; i < 47; i++)
{
byte[] byte = new byte[1];
crypto.GetBytes(byte);
data[i] = byte;
}
}
我想知道是因为我受到了 MSDN 的启发。由于在有限值上使用模数的不公平分配,它基本上检查接收到的字节是否公平。 (我正在构建一个随机字符串生成器,我不想让字母表前面的字符获得不公平分配的优势)
所以基本上我的问题是,无论是循环 "GetBytes" 来获取 N 个字节(情况 b),还是直接使用 "GetBytes" 来获取 N 个字节(情况 a),在安全性上是否存在差异.
感谢您的宝贵时间
不,没有。无论您以何种方式获取字节,其生成方式都是相同的。
我想知道以下各项在安全性方面是否存在差异:
案例 A:
byte[] data = new byte[47];
using(RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider())
{
crypto.GetBytes(data);
}
案例 B:
byte[] data = new byte[47];
using(RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider())
{
for(int i = 0; i < 47; i++)
{
byte[] byte = new byte[1];
crypto.GetBytes(byte);
data[i] = byte;
}
}
我想知道是因为我受到了 MSDN 的启发。由于在有限值上使用模数的不公平分配,它基本上检查接收到的字节是否公平。 (我正在构建一个随机字符串生成器,我不想让字母表前面的字符获得不公平分配的优势)
所以基本上我的问题是,无论是循环 "GetBytes" 来获取 N 个字节(情况 b),还是直接使用 "GetBytes" 来获取 N 个字节(情况 a),在安全性上是否存在差异.
感谢您的宝贵时间
不,没有。无论您以何种方式获取字节,其生成方式都是相同的。