C#RNGCryptoServiceProvider GetBytes(大字节数组)与循环GetBytes(1字节)

时间:2015-05-13 15:47:40

标签: c# security cryptography rngcryptoserviceprovider

我想知道以下几点之间的安全性是否存在差异:

案例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的例子的启发。这基本上检查由于在有限值上使用模数的不公平分布,所接收的字节是否公平。 (我正在构建一个随机字符串生成器,我不想在字母表中尽早给出字符不公平分配的优势)

所以基本上我的问题是,安全性是否存在差异我是否循环&#34; GetBytes&#34;得到N个字节(例b),或者使用&#34; GetBytes&#34;直接得到N个字节(例a)。

感谢您的时间

1 个答案:

答案 0 :(得分:1)

不,没有。无论你采用哪种方式,都以相同的方式生成字节。