我一直在尝试模拟在C#中滚动一个6面骰子。我认为使用RNGCSP比Random更好,因为它更安全。
我尝试使用MSDN's example code来实现这一目标,但有些事情我从代码中无法理解:
答案 0 :(得分:3)
<强> 1。如何使用RNGCSP生成5位数的长数字?
对于数字,您可以使用范围。你必须考虑自己的下限。数字范围在RNGCryptoServiceProvider中处理。
因此,对于5位数字min
,0
或10000
和max
将为100000
,因为max
是独家
<强> 2。如何生成1到6的数字(不包括零)?
基本上以同样的方式,你生成一个范围[1,7],其中7 - max
值 - 是独占的。
如果你只想要一个骰子结果,你可以做这样的事情(未经测试!):
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] singleByteBuf = new byte[1];
int max = Byte.MaxValue - Byte.MaxValue % 6;
while (true) {
rng.GetBytes(singleByteBuf);
int b = singleByteBuf[0];
if (b < max) {
return b % 6 + 1;
}
}
基本上是相同的想法,但是只能从RNGCryptoServiceProvider
一次请求1个字节,所以它不会浪费3个额外的字节。