PHP 8.2.0 RC7 available for testing

random_bytes

(PHP 7, PHP 8)

random_bytesПолучает криптографически безопасные случайные байты

Описание

random_bytes(int $length): string

Генерирует строку криптографически случайных байт произвольной длины, которую можно использовать в криптографических целях, например, для генерации соли, ключей или векторов инициализации.

Источник случайных величин, используемых данной функцией:

  • В Windows всегда используется » CryptGenRandom() Начиная с PHP 7.2.0, вместо него всегда будет использоваться » CNG-API.
  • В Linux, если доступен, используется системный вызов » getrandom(2).
  • На других платформах используется /dev/urandom.
  • Если доступные источники случайных величин отсутствуют, то выбрасывается исключение Random\RandomException.

Замечание: Эта функция была добавлена в PHP 7.0, а для версий с 5.2 по 5.6 включительно доступна » пользовательская реализация.

Список параметров

length

Длина генерируемой строки в байтах; должно быть 1 или больше.

Возвращаемые значения

Возвращает строку, состоящую из заданного количества криптографически безопасных байт.

Ошибки

  • Если подходящие источники случайных величин отсутствуют, то выбрасывается исключение Random\RandomException.
  • Если значение параметра length меньше 1, будет выброшена ошибка ValueError.

Список изменений

Версия Описание
8.2.0 В случае возникновения ошибки CSPRNG, функция теперь будет выбрасывать исключение Random\RandomException. Ранее выбрасывалось исключение Exception.

Примеры

Пример #1 Пример использования random_bytes()

<?php
$bytes 
random_bytes(5);
var_dump(bin2hex($bytes));
?>

Результатом выполнения данного примера будет что-то подобное:

string(10) "385e33f741"

Смотрите также

  • Random\Randomizer::getBytes() - Получает случайные байты
  • random_int() - Получает криптографически безопасное, равномерно выбранное целое число
  • bin2hex() - Преобразует бинарные данные в шестнадцатеричное представление
add a note

User Contributed Notes 1 note

up
5
ccbsschucko at gmail dot com
4 years ago
<?php
   
function str_rand(int $length = 64){ // 64 = 32
       
$length = ($length < 4) ? 4 : $length;
        return
bin2hex(random_bytes(($length-($length%2))/2));
    }
   
   
var_dump(str_rand());
   
// d6199909d0b5fdc22c9db625e4edf0d6da2b113b21878cde19e96f4afe69e714
?>
To Top