Хотя ответ был принят несколько лет назад, я снова открою его.
Поскольку вся эта случайность зависит от системного времени, давайте возьмемся за системное время! Количество времени, которое операция занимает на компьютере, на самом деле довольно изменчиво (особенно, если на этом сервере происходит что-то другое), поэтому, если мы воспользуемся этим с помощью microtime ... (не удалось найти никаких переносимых команд nanotime)
$a='';
for (int $i=0; $i<9001; $i++)
{
usleep(mt_rand(1000,10000));//Also eliminates timing attacks... possibly?
$a=hash('SHA512',$a.uniqid(mt_rand().microtime(),true));
}
echo $a;
Номинально это имеет 207023 бита энтропии, так как вы добавляете еще 23 бита на каждую итерацию, но есть много взаимозависимостей, поэтому, вероятно, на несколько порядков меньше. Все еще довольно хорошо.
Вам известны какие-либо операции на PHP, которые занимают действительно случайное количество времени? Как ... HTTP-запрос какого-либо веб-сайта (кроме RANDOM.org) и измерение времени, которое требуется?