array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), 'this' => array ( 0 => 'function.sodium-crypto-pwhash-str.php', 1 => 'sodium_crypto_pwhash_str', ), 'up' => array ( 0 => 'ref.sodium.php', 1 => 'Функции Sodium', ), 'prev' => array ( 0 => 'function.sodium-crypto-pwhash-str-verify.php', 1 => 'sodium_crypto_pwhash_str_verify', ), 'next' => array ( 0 => 'function.sodium-crypto-pwhash.php', 1 => 'sodium_crypto_pwhash', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ru', 'path' => 'reference/sodium/functions/sodium-crypto-pwhash-str.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 7 >= 7.2.0, PHP 8)
sodium_crypto_pwhash_str — Получить ASCII-кодированный хеш
Использует ресурсоёмкий по ЦПУ и памяти алгоритм хеширования. Соль генерируется случайно. Можно задать ограничения по использованию памяти и ЦПУ. Можно использовать для генерации 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
.
Имеет смысл использовать одинаковые уровни защищённости в
memlimit и 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
являются обязательными.