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

时间:2014-05-05 20:24:39

标签: c# .net random

当我使用Random.Next()框架使用的算法时,返回给我一个“伪随机”数字?

我读了一下Linear congruential generator。这是.NET使用的技术吗?

修改

我看documentation关于Random课程,但这是一项着名的技巧?这个算法有一个名称作为例子(线性同余生成器)?

1 个答案:

答案 0 :(得分:6)

检查documentation这类事情通常是值得的:

  

Random类的当前实现基于Donald E. Knuth的减法随机数生成器算法。有关更多信息,请参阅D. E. Knuth。 "计算机程序设计的艺术,第2卷:研究数学算法"。 Addison-Wesley,Reading,MA,第二版,1981年。

这让我想到了这个:

  

http://rosettacode.org/wiki/Subtractive_generator

另外值得一提的是,来自同一个MSDN文档:

  

要生成适合创建随机密码的加密安全随机数,例如,请使用从System.Security.Cryptography.RandomNumberGenerator派生的类,例如System.Security.Cryptography.RNGCryptoServiceProvider。

具体来说,由于第二个链接中的这个语句,常规Random算法很弱:

  

任何观察 i 连续数字的人都可以预测下一个数字

的地方并不像你想象的那么大。