更好的随机生成PHP

Unk*_*ech 21 php security random

我知道只要使用rand()是可预测的,如果您知道自己在做什么,并且可以访问服务器.

我有一个项目高度依赖于选择尽可能不可预测的随机数.所以我正在寻找可以产生更好的随机数的建议,无论是其他内置函数还是用户函数.

我用这个做了一点测试:

$i = 0;

while($i < 10000){
    $rand = rand(0, 100);

    if(!isset($array[$rand])){
        $array[$rand] = 1;
    } else {
        $array[$rand]++;
    }

    sort($array);
    $i++;
}
Run Code Online (Sandbox Code Playgroud)

我发现结果是均匀分布的,每个数字生成的次数都有一个奇怪的模式.

Chr*_*yer 21

添加,乘以或截断不良随机源会给您带来较差的随机结果.有关解释,请参阅随机数和随机数简介.

你对PHP rand()函数是正确的.有关引人注目的说明,请参见统计分析的第二个数字.(第一个数字是引人注目的,但它是由斯科特·亚当斯绘制的,而不是用兰德()绘制的).

一种解决方案是使用真正的随机生成器,例如random.org.另一个,如果你在Linux/BSD /等.是使用/ dev/random.如果随机性是关键任务,则必须使用硬件随机生成器.


Kev*_*vin 5

random.org有一个可以通过HTTP访问的API.

RANDOM.ORG是一种真正的随机数服务,可通过大气噪​​声产生随机性.