(PHP 7 >= 7.2.0)
sodium_crypto_pwhash — Получить ключ с пароля
$length
, string $password
, string $salt
, int $opslimit
, int $memlimit
[, int $alg
] ) : stringЭта функция предоставляет низкоуровневый доступ к функции crypto_pwhash библиотеки libsodium. Если у вас нет принципиальной необходимости в этой функции, то лучше использовать sodium_crypto_pwhash_str() или password_hash().
length
integer; Длина создаваемого хеша пароля в байтах.
password
string; Пароль, для которого создается хеш.
salt
string Соль, которую нужно добавить к паролю перед хешированием. Соль должна быть непредсказуемой, в идеале генерируемой из хорошего источника случайных чисел, такого как random_bytes(), а также быть длиной не меньше байт, указанных в константе SODIUM_CRYPTO_PWHASH_SALTBYTES
.
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
.
alg
integer Число, указывающее используемый алгоритм хеширования. По умолчанию задана SODIUM_CRYPTO_PWHASH_ALG_DEFAULT
(рекомендуемый в настоящее время алгоритм, который может быть изменен с при смене версии libsodium на другую), или явно используя константу SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13
, представляющую версию алгоритма Argon2id 1.3.
Возвращает захешированный пароль, или FALSE
в случае возникновения ошибки. Возвращаемое значение
является бинарной строкой, а не ASCII-представлением и не содержит никакой
дополнительной информации о параметрах, с которыми генерировался хеш. Таким образом
вам необходимо самим сохранять значения использованных параметров для
проверки корректности хеша в будущем. Чтобы всем этим не заниматься - используйте
функцию sodium_crypto_pwhash_str().
Пример #1 Пример использования password_hash()
<?php
//Для дальнейшенй проверки необходимо сохранить соль
$salt = random_bytes(SODIUM_CRYPTO_PWHASH_SALTBYTES);
// Используем bin2hex для удобочитаемости
echo bin2hex(
sodium_crypto_pwhash(
16, // == 128 бит
'password',
$salt,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13
)
);
?>
Результатом выполнения данного примера будет что-то подобное:
a18f346ba57992eb7e4ae6abf3fd30ee