sodium_crypto_pwhash

(PHP 7 >= 7.2.0)

sodium_crypto_pwhashПолучить ключ с пароля

Описание

sodium_crypto_pwhash ( int $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