Чем эти 2 строки PHP отличаются? - PullRequest
3 голосов
/ 27 октября 2009

Предполагая, что у нас есть соль, которая находится в базе данных и которая была сгенерирована следующим образом

$salt = time();

В чем разница между этими двумя строками.

$pass1 = hash('sha1', $password . $salt);

$pass2 = hash_hmac('sha1', $password, $salt);

Они не производят одинаковую продукцию. Первая функция hash принимает 2 параметра, а hash_hmac - 3 параметра. Поэтому вы могли бы подумать, что мы можем получить этот третий дополнительный параметр, используя $salt отдельно (для выполнения третьего параметра), а не конкатенировать его с паролем ($password . $salt), как мы это делали в строке 2. Но это не так просто, результаты 2 разные. Зачем? Что здесь происходит?

1 Ответ

15 голосов
/ 27 октября 2009

Поскольку HMAC SHA-1 отличается от SHA-1 с объединенным сообщением и ключом. HMAC больше похож на sha1($salt . sha1($salt . $password)), но не совсем. В Википедии есть хорошее описание HMAC .

...