Аутентификация не удалась, даже пароль правильный, с использованием метода хеширования bcrypt

У меня проблема с методом хеширования bcrypt и mysql. Я использую класс Bcrypt из этого ответа.

Я создаю сценарий входа и проверяю правильность пароля. Я сравниваю пароль из ввода и хешированный пароль из БД.

$username= $_POST['username']; //username from input
$pass= $_POST['pass'];         //username from input

$query= mysql_query("SELECT pass FROM users WHERE username='$username'");
    $row=  mysql_fetch_row($query);

$row[0];// hashed password, I echo $row[0] and it shows correct hashed password

$bcrypt = new Bcrypt(15);
$isGood = $bcrypt->verify($pass, $row[0]);

if ($isGood){
echo "Authentication succeeded";
          }
else { 
    echo"Authentication failed";
   }

Даже $pass правильный, я всегда получаю «Аутентификация не удалась». Есть идеи, что может быть не так?

Заранее спасибо.


person Edva Ptr    schedule 19.12.2012    source источник
comment
что проверяет if($isGood)???   -  person Ghostman    schedule 19.12.2012
comment
мать Бобби Тейблса хотела бы поговорить с вами   -  person PeeHaa    schedule 19.12.2012
comment
@soul Проверяет, хорошо ли работает приложение. На данный момент это не удается.   -  person DaveRandom    schedule 19.12.2012
comment
Почему-то я полагаю, что $bcrypt->hash не использовался для создания значения, хранящегося в БД. Я прав? )   -  person raina77ow    schedule 19.12.2012
comment
Конечно, у вас есть класс Bcrypt?   -  person Damonsson    schedule 19.12.2012
comment
@soul проверяет, совпадают ли пароль из ввода и хешированный пароль из БД. в этом примере я использую этот пример raina77ow, это уже добавлено в скрипт регистрации. или вы хотите увидеть и его код? :)   -  person Edva Ptr    schedule 19.12.2012
comment
@ Дэймонссон, да. приятно отметить, что $hash = $bcrypt-›hash($pass) и $isGood = $bcrypt-›verify($pass, $hash) работают нормально. но если я получу пароль из БД, функция проверки не работает :( Я прочитал много других вопросов с проблемами bcrypt, но не могу найти ситуацию, аналогичную моей.   -  person Edva Ptr    schedule 19.12.2012


Ответы (2)


Столбец pass в таблице users недостаточно широк для хранения полного хэша; он должен быть не менее 60 символов в ширину, то есть VARCHAR(60).

Кстати, вы также должны проверить PasswordLib, написанную и поддерживаемую ircmaxell, который также неплохо поддерживает Bcrypt.

person Ja͢ck    schedule 19.12.2012
comment
да ты прав. проблема была с таблицей БД, я нашел ее до того, как вы ответили. так что теперь нормально. очень глупая ошибка :( - person Edva Ptr; 19.12.2012

Попробуйте что-то вроде этого:

$bcrypt = new Bcrypt(15);
$hash = $bcrypt->hash($pass);

echo $hash.' =? '.$row[0];

И посмотрите, если это равно

если да, попробуйте что-то вроде этого:

var_dump($hash);
var_dump($row[0]);

Должен быть равен

person Damonsson    schedule 19.12.2012
comment
к сожалению, эхо разных хешей .. не равно. скажем, пароль «тест», поэтому хеш будет каждый раз равным, если проход «тест»? Я думаю, может быть, это что-то с солью.. - person Edva Ptr; 19.12.2012
comment
$row[0];// hashed password, I echo $row[0] and it shows correct hashed password ‹- значит, это неверно однако? - person Damonsson; 19.12.2012
comment
проблема была с таблицей БД, должно быть varchar(60). Спасибо тебе за помощь :) - person Edva Ptr; 19.12.2012