Использование bcrypt для паролей пользователей - PullRequest
0 голосов
/ 25 февраля 2012

Я использую функцию phpass bcrypt для хеширования пароля на моем сайте.Теперь это не сработает.Попытка сравнить с функцией CheckPassword не сработает.Я провел обширную отладку каждой строки, получаемой через каждую функцию, которую использовал для расшифровки хешей, и пришел к выводу, что хеш, сгенерированный bcrypt, довольно случайный.Итак, вновь сгенерированный хеш-пароль в виде открытого текста никогда не совпадет с хэшем в моей базе данных.Это правда?Если так, как, черт возьми, я заставлю это работать?Исходный код довольно прост.

// when creating user 
<db insert code>$hash->HashPassword($_POST['password']);

// when logging in
return $hash->CheckPassword($user->password, $_POST['password']);

1 Ответ

1 голос
/ 25 февраля 2012

Edit: Проблема в том, что у вас неправильный порядок, вам нужен пароль, а затем сохраненный хеш.

$check = $hasher->CheckPassword($password, $stored_hash);

Источник

Это имеет значение, как я уже говорил (ниже), сохраненный хеш используется для определения способа хеширования пароля для сравнения, поэтому неправильный порядок аргументов приведет к сбою.

Ответ до:

Вы не расшифровываете хэш, вы проверяете его, хэшируя сопоставимые данные таким же образом. Хэши BCrypt включают в себя хэш, соль и количество раундов, поэтому при проверке не должно возникнуть никаких проблем.

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

Насколько я могу судить, ваш чек - это звук. Проблема должна быть в другом месте. Вы уверены, что $user->password на самом деле содержит хеш полностью? Хэши BCrypt состоят из 60 символов, поэтому убедитесь, что они не усекаются.

...