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.如果随机性是关键任务,则必须使用硬件随机生成器.