hash_equals

(PHP 5 >= 5.6.0, PHP 7)

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

Описание

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

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

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

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

known_string

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

user_string

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

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

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

Ошибки

Выдает ошибку уровня E_WARNING, если один из параметров не является строкой.

Примеры

Пример #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, и длина известной строки может быть определена в случае атаки по времени.

Замечание:

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