hash_pbkdf2

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

hash_pbkdf2Генерирует PBKDF2-ключ на основе исходного пароля

Описание

hash_pbkdf2(
    string $algo,
    string $password,
    string $salt,
    int $iterations,
    int $length = 0,
    bool $binary = false,
    array $options = []
): string

Список параметров

algo

Название выбранного алгоритма хеширования (то есть "md5", "sha256", "haval160,4" и т. д.). Список поддерживаемых алгоритмов даёт описание функции hash_algos().

password

Пароль для деривации.

salt

Соль для формирования ключа. Требуется сгенерировать случайное значение.

iterations

Количество внутренних итераций для преобразования исходного пароля в хеш-ключ.

length

Длина строки вывода. Если параметр binary задали как true, значение этого параметра соответствует длине ключа в байтах, если для параметра binary установили значение false — соответствует удвоенной длине ключа в байтах, поскольку каждый байт ключа возвращается в виде двух шестнадцатеричных символов.

Если задали значение 0, функция вернёт весь вывод заданного алгоритма.

binary

Если значение параметра равно true, выводятся необработанные двоичные данные. Если false — выводятся шестнадцатеричные строчные буквы в нижнем регистре.

options

Массив опций для алгоритмов хеширования. Пока вариантами функций хеширования MurmurHash поддерживается только параметр "seed".

Возвращаемые значения

Функция возвращает строку, которая содержит сформированный ключ в виде строки шестнадцатеричных чисел в нижнем регистре, если только для параметра binary не установили значение true, тогда возвращаются необработанные двоичные данные.

Ошибки

Функция выбрасывает исключение ValueError, если алгоритм неизвестен, параметр iterations меньше или равен 0, параметр length меньше 0 или параметр salt чрезмерно длинный (больше значения выражения INT_MAX - 4).

Список изменений

Версия Описание
8.0.0 Теперь выбрасывается исключение ValueError, если возникла ошибка; раньше функция возвращала false и выдавала ошибку уровня E_WARNING.
7.2.0 Запретили некриптографические хеш-функции (adler32, crc32, crc32b, fnv132, fnv1a32, fnv164, fnv1a64, joaat).

Примеры

Пример #1 Пример базового использования функции hash_pbkdf2()

<?php

$password
= "password";
$iterations = 600000;

// Создаём криптографически безопасную случайную соль функцией random_bytes()
$salt = random_bytes(16);

$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 20);
var_dump($hash);

// Для необработанного двоичного файла параметр $length требуется уменьшить вдвое, чтобы получить аналогичные результаты
$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 10, true);
var_dump(bin2hex($hash));

?>

Вывод приведённого примера будет похож на:

string(20) "120fb6cffcf8b32c43e7"
string(20) "120fb6cffcf8b32c43e7"

Примечания

Предостережение

Метод PBKDF2 может использовать для хеширования паролей в целях хранения. Однако следует отметить, что функция password_hash() или функция crypt() с типом хеша CRYPT_BLOWFISH лучше для хранения паролей.

Смотрите также