如何使用C#生成真正的(非伪)随机数?
我知道Random类可以生成伪随机数,但是有没有一种方法可以生成真正的随机数?
回答:
这里的答案有两个主要方面。您应该适当注意一些非常重要的细节。
回答:
的RNGCryptoServiceProvider
,这是在BCL的加密API的一部分,应该为你做的工作。从技术上讲,它仍然是一个伪随机数,但是“随机性”的质量要高得多-
顾名思义,它适用于加密目的。
还有其他具有高质量伪随机生成器的低温API。诸如Mersenne扭曲器之类的算法非常流行。
与Random
BCL中的类相比,它要好得多。Random
例如,如果在图表上绘制由生成的数字,则您应该能够识别模式,这是弱点的有力标志。这主要是由于该算法仅使用固定大小的种子查找表。
回答:
要生成 真正的
随机数,您需要利用一些自然现象,例如核衰变,微观温度波动(CPU温度是一个相对方便的来源),仅举几例。但是,这要困难得多,并且当然需要附加的硬件。我怀疑实际的解决方案(RNGCryptoServiceProvider
或类似的解决方案)应该为您做得很好。
现在,请注意,如果 确实需要真正的随机数 ,则可以使用 Random.org之类
的服务,该服务会生成具有非常高的随机性/熵(基于 大气噪声
)的数字。数据可免费下载。尽管这确实为您提供了适合科学研究的数据,但对于您的情况,这可能不必要地变得复杂。
最终由您选择,但至少现在您应该能够了解RNG的各种类型和级别,从而做出有意义的决定。
以上是 如何使用C#生成真正的(非伪)随机数? 的全部内容, 来源链接: utcz.com/qa/413862.html