Openssl random pseudo bytes: примеры (PHP)
openssl_random_pseudo_bytes(int $length, bool &$strong_result = null): stringФункция openssl_random_pseudo_bytes
Функция openssl_random_pseudo_bytes генерирует криптографически безопасную псевдослучайную строку байтов. Она используется в ситуациях, где требуется высокая энтропия, например для создания токенов, ключей шифрования, соли для хеширования паролей или значений nonce.
- length (int): Обязательный параметр. Определяет длину генерируемой строки в байтах.
- crypto_strong (bool &): Необязательный параметр, передаваемый по ссылке. Если передан, в него будет записано значение
true, когда используется криптографически стойкий алгоритм генерации, иfalseв противном случае.
Простые примеры
$bytes = openssl_random_pseudo_bytes(16);
echo bin2hex($bytes);1a7f3d9c45b802e4f6c1d890a27b3e1d
$crypto_strong = false;
$bytes = openssl_random_pseudo_bytes(32, $crypto_strong);
echo 'Результат: ' . bin2hex($bytes) . '\n';
echo 'Криптостойкий: ' . ($crypto_strong ? 'да' : 'нет');Результат: 4e2f8c1a9b7d5f3e0c2a6b8f1d4e7a3c5f0e2d1b8a9c7f6e5d4a3b2c1f0e9d8 Криптостойкий: да
Альтернативы в PHP
Функция random_bytes, доступная с PHP 7, является предпочтительной для генерации криптографически безопасных случайных строк. Она выбрасывает исключение при ошибке, что делает код надежнее.
Для случаев, не требующих криптографической стойкости (например, генерация идентификаторов для кеша), можно использовать uniqid в комбинации с mt_rand или random_int. random_int является криптографически безопасным аналогом rand и mt_rand.
Типичные ошибки
Указание нулевого или отрицательного значения длины вызывает ошибку.
$bytes = @openssl_random_pseudo_bytes(0);
if ($bytes === false) {
echo 'Ошибка генерации.';
}Ошибка генерации.
Функция возвращает двоичную строку. Ее нельзя выводить напрямую или использовать как строку без преобразования.
$bytes = openssl_random_pseudo_bytes(5);
echo 'Длина строки: ' . strlen($bytes);Длина строки: 5
Изменения в PHP
В PHP 8.0 не было внесено существенных изменений в поведение функции openssl_random_pseudo_bytes. Однако в целом, с версии PHP 7.0, рекомендуется использовать функцию random_bytes для подобных задач, так как она имеет более строгую семантику ошибок.
Расширенные примеры
function generateSecureToken($length = 32) {
$bytes = openssl_random_pseudo_bytes($length, $strong);
if ($bytes === false || $strong === false) {
throw new RuntimeException('Не удалось сгенерировать криптостойкие байты.');
}
return bin2hex($bytes);
}
echo generateSecureToken();f3a7b9e2d4c6a1f8b5e0d3c7a9b2f6e1d4c8a0b7f3e2d1c5
$salt = bin2hex(openssl_random_pseudo_bytes(12));
$passwordHash = password_hash('user_password', PASSWORD_BCRYPT, ['salt' => $salt]);
echo $salt;a3f8c1d4e7b0a9f2
$method = 'aes-256-cbc';
$ivLength = openssl_cipher_iv_length($method);
$iv = openssl_random_pseudo_bytes($ivLength);
echo 'IV (' . $ivLength . ' байт): ' . bin2hex($iv);IV (16 байт): 1e4f8a3d7c0b9e2a5f6d1c8b3a0e7f4d2
Аналоги в других языках
Openssl random pseudo bytes в Python
Модуль secrets предоставляет функции для безопасной генерации. os.urandom() генерирует случайные байты.
import secrets
token_bytes = secrets.token_bytes(16)
print(token_bytes.hex())a3f5d78e9c2b1a0f4e6d8c7b5a9f3e2d
Модуль crypto содержит метод randomBytes.
const crypto = require('crypto');
const bytes = crypto.randomBytes(16);
console.log(bytes.toString('hex'));8f4a6d3b9c1e7f2a5d0b8e3c6a9f1d4e
В SQL нет прямой аналогии для генерации байтов на стороне СУБД. Обычно такая генерация происходит на стороне приложения. Для случайных строк можно использовать RAND() и UUID(), но они не являются криптографически стойкими.
PHP openssl_random_pseudo_bytes function comments
- Php openssl random pseudo bytes - аргументы и возвращаемое значение
- Функция php openssl_random_pseudo_bytes - описание
- openssl random pseudo bytes - примеры
- openssl random pseudo bytes - похожие методы на php
- openssl_random_pseudo_bytes на js, python, mysql
- openssl random pseudo bytes изменения php
- Примеры openssl_random_pseudo_bytes на php