我需要基于字符串获取一个“随机”数字(0-9),以便可以重新创建它。我的解决方案是使用 SHA512 并取第二个数字,如下所示:
$random = filter_var(hash('sha512', 'STRING COMES HERE'), FILTER_SANITIZE_NUMBER_INT)[1];
我想知道这是否准确且不可预测。我需要这个随机数来决定两个选项。我做了一个测试,看看这些数字是否给了我 50/50 的比率。
$option1 = 0;
$option2 = 0;
$times = 1000000; // amount of iterations
for($i = 0; $i < $times; $i++) {
$result = filter_var(hash('sha512', rand()), FILTER_SANITIZE_NUMBER_INT)[1];
if($result < 5) {
$option1++;
}
else {
$option2++;
}
}
echo "Option 1: ".($option1/$times * 100)."%";
echo "</p>Option 2: ".($option2/$times * 100)."%";
这就是结果
Option 1: 49.9207%
Option 2: 50.0793%
我需要知道使用这种方法是否安全,即使结果看起来相当准确。