Я хотел бы создать безопасное случайное целое число между $min
и $max
в PHP5.6. Как rand()
, так и mt_rand()
в PHP считаются не криптографически защищенными.Генерировать безопасное случайное целое число в диапазоне с PHP 5.6
От docs:
Внимание
Эта функция не создает криптографически безопасных значений, и не должны использоваться для криптографических целей. Если вам требуется криптографически безопасное значение, попробуйте вместо этого использовать random_int(), random_bytes() или openssl_random_pseudo_bytes().
PHP 7 добавляет random_int()
(docs), который соответствует моему потребительной случай прекрасно:
random_int - Генерирует криптографически безопасные псевдослучайные целые
Но как эта функциональность быть достигнуты в PHP 5.6?
Моя наивная попытка была такова:
<?php
function secure_rand($min, $max)
{
return (unpack("N", openssl_random_pseudo_bytes(4)) % ($max - $min)) + $min;
}
Но я, кажется, всегда получаю "2" при вызове secure_rand(1, 100)
. Я также прочитал, что использование операции модуля таким образом может привести к смещению. Как я могу эмулировать random_int()
в PHP 5.6?
https://github.com/ircmaxell/random_compat стоит глядя на – Crecket