有时候需要完全随机的数据,比如生成密钥等,这种会在极短时间内生成的随机数,如果使用时间作为种子是很不可靠的;
一般在C/C++中可以使用malloc/new来作为种子,但C#如果使用这非托管的方式较为不妥;
根据官方的介绍,我整理为一个函数,方便以后使用:
函数代码:
public static byte[] randomBytes(int count)
{
byte[] bs = new byte[count];
//
byte[] randomBytes = new byte[4];
RNGCryptoServiceProvider rngServiceProvider = new RNGCryptoServiceProvider();
rngServiceProvider.GetBytes(randomBytes);
Int32 result = BitConverter.ToInt32(randomBytes, 0);
int seed = result;
Random random = new Random(seed);
for (int i = 0; count > i; i++)
{
bs[i] = (byte)random.Next(0, 255);
}
//
return bs;
}
结果可以测试出来是完全随机的。