当我使用Random.Next()
框架使用的算法时,返回给我一个“伪随机”数字?
我读了一下Linear congruential generator。这是.NET使用的技术吗?
修改
我看documentation关于Random
课程,但这是一项着名的技巧?这个算法有一个名称作为例子(线性同余生成器)?
答案 0 :(得分:6)
检查documentation这类事情通常是值得的:
Random类的当前实现基于Donald E. Knuth的减法随机数生成器算法。有关更多信息,请参阅D. E. Knuth。 "计算机程序设计的艺术,第2卷:研究数学算法"。 Addison-Wesley,Reading,MA,第二版,1981年。
这让我想到了这个:
另外值得一提的是,来自同一个MSDN文档:
要生成适合创建随机密码的加密安全随机数,例如,请使用从System.Security.Cryptography.RandomNumberGenerator派生的类,例如System.Security.Cryptography.RNGCryptoServiceProvider。
具体来说,由于第二个链接中的这个语句,常规Random算法很弱:
任何观察 i 连续数字的人都可以预测下一个数字
我的地方并不像你想象的那么大。