(PHP 7 >= 7.2.0, PHP 8)
sodium_crypto_pwhash_str — Получает ASCII-кодированный хеш
$password
, int $opslimit
, int $memlimit
): stringФункция использует ресурсоёмкий по ЦПУ и памяти алгоритм хешированияа, а также случайно сгенерированную соль и ограничения по памяти и процессору для генерации хэша в кодировке ASCII, который подходит для хранения паролей.
password
Строка (string); пароль, для которого функция сгенерирует хеш.
opslimit
Задаёт ограничение на потребление процессорного времени. Увеличение этого числа приведет к тому,
что функции потребуется больше циклов ЦП для вычисления ключа. Предел операций на соответствующие
значения в зависимости от предполагаемого использования
устанавливают константами в порядке силы: SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE
,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE
и SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE
.
memlimit
Максимальный объем оперативной памяти в байтах, которую будет использовать функция.
В выборе подходящего значения помогают константы в порядке размера:
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE
и SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE
.
Обычно константы должны сочетаться со значениями opslimit, которые им соответствуют.
Функция возвращает хеш пароля.
Чтобы для одного и того же пароля каждый раз генерировался один и тот же хеш,
устанавливают одинаковые значения параметров opslimit
и memlimit
. Поскольку эти параметры функция включает в сгенерированный
хеш, функция sodium_crypto_pwhash_str_verify() может проверять его
корректность без необходимости хранить эти параметры отдельно.
Пример #1 Пример использования функции sodium_crypto_pwhash_str()
<?php
$password = 'password';
echo sodium_crypto_pwhash_str(
$password,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
?>
Вывод приведённого примера будет похож на:
$argon2id$v=19$m=65536,t=2,p=1$oWIfdaXwWwhVmovOBc2NAQ$EbsZ+JnZyyavkafS0hoc4HdaOB0ILWZESAZ7kVGa+Iw
Замечание:
Хеши вычисляются алгоритмом Argon2ID, который устойчив к атакам стороннего канала и GPU. В отличие от функции password_hash(), у этой функции нет параметра salt (он генерируется автоматически), а параметры
opslimit
иmemlimit
— обязательные.