传递给Java的随机数生成器的种子值如何影响其输出?

nam*_*men 7 java random

传递给Java的随机数生成器的种子值如何影响其输出?如果我知道种子价值,我将如何计算它将输出哪些数字?

还有一些种子价值比其他种子价值更好,比其他产生更多的psudo随机性?

Jes*_*per 10

你不能在软件中生成真正的随机数,因为软件是确定性的:给定一些输入,它原则上总是会产生可预测的输出.

因此,为了获得随机数,已经发明了许多算法,这些算法生成看起来随机的数字序列(但实际上并非如此 - 这就是为什么它们被称为伪随机数).

这样的算法以一些起始值,种子开始,然后用它进行一些计算以生成下一个伪随机数.

如果算法是好的,那么种子值应该没有差别:一个种子值在生成随机数时不应该比任何其他种子值更好.

通常,将当前时间作为种子值,这样每次生成一系列数字时,都会得到不同的序列.请注意,如果使用相同的种子值,则每次运行时都会得到相同的伪随机数序列.

如果您使用伪随机数进行加密,则应该非常小心,因为如果攻击者知道种子值,那么他可以重新生成可能危及系统安全性的随机数序列.对于真正安全的系统,人们使用特殊的基于硬件的随机数生成器,它可以生成真正的随机数.Java有一个java.security.SecureRandom与这些系统接口的类.

有关不同算法的更多详细信息和信息,请参阅Wikipedia上的随机数生成.