Чем эти 2 строки PHP отличаются?
Вопрос
Предполагая, что у нас есть соль, которая находится в базе данных и которая была сгенерирована следующим образом
$ salt = time ();
В чем разница между этими двумя строками? Р>
$pass1 = hash('sha1', $password . $salt);
$pass2 = hash_hmac('sha1', $password, $salt);
Они не выдают одинаковый результат. Первая функция hash
принимает 2 параметра, а для hash_hmac
требуется 3 параметра. Поэтому вы можете подумать, что мы можем получить этот третий дополнительный параметр, используя $ salt
отдельно (для выполнения третьего параметра), а не конкатенировать его с паролем ( $ password. $ Salt <). / code>), как мы это делали в строке 2. Но это не так просто, результаты 2 разные. Зачем? Что здесь происходит?
Решение
Потому что HMAC SHA-1 отличается от SHA-1 с объединенным сообщением и ключом. HMAC больше похож на sha1 ($ salt. Sha1 ($ salt. $ Password))
, но не совсем так. В Википедии есть хорошее описание HMAC .