【发布时间】:2020-07-13 10:18:43
【问题描述】:
我一直在使用RNGCryptoServiceProvider 创建一个随机整数。这将在整数的上下限之间生成一个随机整数。
private static RNGCryptoServiceProvider rngCryptoServiceProvider = new RNGCryptoServiceProvider();
public int Execute(int lowerBound, int upperBound)
{
// initialize an array of bytes equal to the number of bytes in an integer
var numberOfBytes = sizeof(int);
var bytes = new byte[numberOfBytes];
// fill the array with random bytes
rngCryptoServiceProvider.GetBytes(bytes);
// convert the byte array to an integer
var bitsAsInteger = BitConverter.ToInt32(bytes, 0);
return bitsAsInteger;
}
现在我想在两个整数之间生成一个随机整数。根据我的阅读,这不是一项微不足道的任务。所以,我想我可以随机播种System.Random 类并使用Next() 功能来进行数学运算。这是一个明智的做法吗?
private static RNGCryptoServiceProvider rngCryptoServiceProvider = new RNGCryptoServiceProvider();
public int Execute(int lowerBound, int upperBound)
{
// initialize an array of bytes equal to the number of bytes in an integer
var numberOfBytes = sizeof(int);
var bytes = new byte[numberOfBytes];
// fill the array with random bytes
rngCryptoServiceProvider.GetBytes(bytes);
// convert the byte array to an integer
var bitsAsInteger = BitConverter.ToInt32(bytes, 0);
// use the random integer to seed the non cryptographically secure Random class
var random = new System.Random(bitsAsInteger);
// use the Next() functionality to do the math to get a random number between two values
var randomInteger = random.Next(lowerBound, upperBound);
return randomInteger;
}
有没有其他方法可以在不使用System.Random 的情况下达到相同的结果?
【问题讨论】: