.NET中用于生成随机数的算法是什么?

4
当我使用 Random.Next() 时,框架使用什么算法来返回一个“伪随机”数?我稍微了解了一下 线性同余生成器。这是.NET使用的技术吗?
编辑:我查看了关于 Random 类的文档,但这是一种著名的技术吗?这个算法有一个像例子(线性同余生成器)那样的名称吗?

1
那与C#无关。它是.NET的一部分,可以从任何托管式编程语言中使用。 - John Saunders
4
请看这里:http://referencesource.microsoft.com/#mscorlib/system/random.cs - Jeroen Vannevel
@JohnSaunders 是的,抱歉,感谢您的编辑。 - Only a Curious Mind
1
@JeroenVannevel 这个算法有名字吗?它是一种著名的技术吗? - Only a Curious Mind
1
你看过文档了吗?Random类的当前实现基于Donald E. Knuth的减法随机数生成算法。有关更多信息,请参见D. E. Knuth。《计算机程序设计艺术,卷2:半数值算法》。Addison-Wesley,Reading,MA,第二版,1981年。 - Jeroen Vannevel
注意,算法的实现似乎存在一个错误:https://connect.microsoft.com/VisualStudio/feedback/details/634761/system-random-serious-bug - fuglede
1个回答

7
通常查看文档会更加有帮助,这里提供一个链接:documentation
现有的Random类实现基于Donald E. Knuth所提出的减法随机数生成算法。更多信息请参见D. E. Knuth的书籍"The Art of Computer Programming, volume 2: Seminumerical Algorithms",Addison-Wesley出版社于1981年第二版发行。
因此可以看到:http://rosettacode.org/wiki/Subtractive_generator
同样值得一提的是,来自同一MSDN文档:
要生成适用于创建随机密码的加密强度随机数,请使用从System.Security.Cryptography.RandomNumberGenerator派生的类,例如System.Security.Cryptography.RNGCryptoServiceProvider。
具体而言,由于第二个链接中的语句:“任何观察i个连续数字的人都能预测下一个数字”,因此常规的Random算法是不安全的,其中i并不像你想象的那么大。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接