php.netが示すように:random_int()
function暗号的に安全な擬似乱数整数を生成します。
しかし、誰かが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()
は最も遅いですが、3つの安全な方法です。
<?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);
結果:
[Rand] Time: 10.973 s
[mt_Rand] Time: 9.628 s
[random_int] Time: 23.069 s
ほとんどの数値ジェネレーターと同様に、Rand()を使用することは暗号的に安全な値を生成せず、Rand()の出力は予測可能であるため、安全ではありません。
PHP 7.0では、random_bytesとrandom_intがコア関数として導入され、ほとんどの乱数ジェネレーターが抱える問題から解放されています。