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
): string

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

algo

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

password

Пароль, используемый для формирования.

salt

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

iterations

Количество итераций для формирования ключа.

length

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

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

binary

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

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

Возвращаемая строка содержит сформированный ключ в виде строки шестнадцатеричных чисел в нижнем регистре. Но если параметр 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.

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

  • password_hash() - Создаёт хеш пароля
  • hash_hkdf() - Формирования ключа HKDF для заданных входных данных
  • sodium_crypto_pwhash() - Получает ключ из пароля, используя Argon2
To Top