2011-05-15 36 views

回答

10

你不能在软件中生成真正的随机数,因为软件是确定性的:给定一些输入,原则上总是会产生一个可预测的输出。因此,为了获得随机数,已经发明了许多算法,这些算法生成的数字序列看起来是随机的(但并不是真的 - 这就是为什么它们被称为伪随机数)的序列。

这样的算法从一些起始值,种子开始,然后用它做一些计算来生成下一个伪随机数。

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

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

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

请参阅Random number generation了解更多关于不同算法的更多细节和信息。

+0

我会投票,但显然我的名声太低。 – namen 2011-05-15 08:06:29

+0

我为你优惠。 ;-)虽然是一个很好的答案。请记住,您也可以接受答案。 – 2011-05-15 08:10:52