hash_equals

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

hash_equalsСравнение строк, нечувствительное к атакам по времени

Описание

hash_equals(string $known_string, string $user_string): bool

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

Эта функция может использоваться для предотвращения атак по времени; к примеру при проверке хешей паролей с помощью crypt().

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

known_string

Строка известной длины, с которой будет производиться сравнение.

user_string

Проверяемая строка.

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

Возвращает true если строки идентичны и false если нет.

Примеры

Пример #1 Пример использования hash_equals()

<?php
$expected
= crypt('12345', '$2a$07$usesomesillystringforsalt$');
$correct = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$incorrect = crypt('apple', '$2a$07$usesomesillystringforsalt$');

var_dump(hash_equals($expected, $correct));
var_dump(hash_equals($expected, $incorrect));
?>

Результат выполнения данного примера:

bool(true)
bool(false)

Примечания

Замечание:

Оба аргумента должны быть одной длины. Если переданы аргументы разной длины, то будет немедленно возвращено false, и длина известной строки может быть определена в случае атаки по времени.

Замечание:

Крайне важно задавать строку с пользовательскими данными вторым аргументом, а не первым.