我一直在測試PHP中生成值的隨機性,並且一直在考慮32位十六進制來表示給定時間範圍內的唯一狀態。PHP僞隨機,4字節的隨機程度
我寫了這個簡單的測試腳本:
$checks = [];
$i = 0;
while (true) {
$hash = hash('crc32b', openssl_random_pseudo_bytes(4));
echo $hash . PHP_EOL;
if (in_array($hash, $checks)) {
echo 'Copy: ' . $i . PHP_EOL;
break;
}
$i++;
$checks[] = $hash;
}
令人驚訝(我)這個腳本在不到10萬次的迭代,以及低至1000次迭代產生一個副本。
我的問題是,我在這裏做錯了什麼?在40億種可能性中,這種頻率似乎不太可能。
CRC不是隨機的,它是一個校驗和 –
我想說這是預期的,因爲這是一個百日咳「悖論」。 –
我已經更新了這個問題,因爲crc32並不是真正的主題,只是最終產品。 – Flosculus