PHP 兰特() 与 random_int()
如 php.net 所示:函数生成加密安全的伪随机整数。random_int()
但是,有人可以解释&之间的区别吗?当只需要一个随机整数时,我可以使用吗?哪一个更快?rand()
random_int()
random_int()
rand()
如 php.net 所示:函数生成加密安全的伪随机整数。random_int()
但是,有人可以解释&之间的区别吗?当只需要一个随机整数时,我可以使用吗?哪一个更快?rand()
random_int()
random_int()
rand()
重新审视这个问题并看到已经给出了答案,我发现我提交评论是公平的,看到他们之前提交过。
PHP 7 函数手册指出:random_int()
“返回最小到最大范围内的加密安全随机整数,包括最大值。
和rand()
*此函数不生成加密安全值“ *
OP的评论:
“@Fred-ii-谢谢。但是,“加密安全伪随机”是什么意思呢?– NDFA”
根据我的发现,可以在以下链接中找到:
其中指出:
加密安全的伪随机数生成器(CSPRNG)或加密伪随机数生成器(CPRNG)[1]是一种伪随机数生成器(PRNG),其属性使其适合在密码学中使用。
关于性能,您需要自己运行基准测试。
从 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