1

有谁知道随机数生成的两种选择中的哪一种会产生更好的随机性:

<?php
$array = array(1,2,3,4,5,6);

shuffle($array);
echo $array[0];

//// OR ////

echo rand(1,6);

?>

或者也许还有我不知道的更好的选择?

4

2 回答 2

7

两者都使用相同的PRNG,因此它们的随机性同样好/坏。显然,平原rand(1,6)更快,因为它只是数学而不是数学和数组的东西。除此之外,array_rand()如果您想要一个数组中的随机元素,您会使用它。

PHP 也有mersenne twister ( mt_rand()),它“更好”但不适合密码学(可能与您的情况无关)。

如果您需要真正的随机性,您可以考虑从中读取/dev/random- 但如果没有可用的随机性,则读取可能会阻塞。您还可以使用基于某些物理效果为您提供更好随机性的硬件设备。

于 2012-12-31T18:28:28.427 回答
1

在大多数系统上,使用随机值播种随机数生成器。在大多数应用程序中,使用当前时间的低阶部分(如秒和微秒)是一个非常好的策略。这是否适合您取决于应用程序。

在 Linux 系统上,该程序还可以从随机数生成器中读取几个字节/dev/random或将其作为种子。/dev/urandom它是来自设备驱动程序和其他难以预测的现象的随机熵的集中。

于 2012-12-31T18:33:09.547 回答