PHP 兰特() 与 random_int()

2022-08-30 12:29:43

php.net 所示:函数生成加密安全的伪随机整数random_int()

但是,有人可以解释&之间的区别吗?当只需要一个随机整数时,我可以使用吗?哪一个更快?rand()random_int()random_int()rand()


答案 1

重新审视这个问题并看到已经给出了答案,我发现我提交评论是公平的,看到他们之前提交过。

PHP 7 函数手册指出:random_int()

“返回最小到最大范围内的加密安全随机整数,包括最大值。

rand()

*此函数不生成加密安全值“ *

OP的评论:

“@Fred-ii-谢谢。但是,“加密安全伪随机”是什么意思呢?– NDFA”

根据我的发现,可以在以下链接中找到:

其中指出:

加密安全的伪随机数生成器(CSPRNG)或加密伪随机数生成器(CPRNG)[1]是一种伪随机数生成器(PRNG),其属性使其适合在密码学中使用。


关于性能,您需要自己运行基准测试。


答案 2

从 PHP 7.1 开始,rand()mt_rand() 的别名。较新的random_int() 是三种方法中最慢但唯一安全的方法。

<?php

$start = microtime(true);
$sum = 0.0;
for ($i = 0; $i < 10000000; $i++) {
    $sum += rand(0, 32767);
}
printf('[rand] Time: %.3f s%s', microtime(true) - $start, PHP_EOL);

$start = microtime(true);
$sum = 0.0;
for ($i = 0; $i < 10000000; $i++) {
    $sum += mt_rand(0, 32767);
}
printf('[mt_rand] Time: %.3f s%s', microtime(true) - $start, PHP_EOL);

$start = microtime(true);
$sum = 0.0;
for ($i = 0; $i < 10000000; $i++) {
    $sum += random_int(0, 32767);
}
printf('[random_int] Time: %.3f s%s', microtime(true) - $start, PHP_EOL);

PHP 7.4 上的结果:

[rand] Time: 0.320 s      
[mt_rand] Time: 0.326 s   
[random_int] Time: 9.255 s

推荐