使用bcrypt哈希方法验证失败,甚至密码正确

时间:2012-12-19 13:23:30

标签: php mysql login bcrypt

我遇到 bcrypt 哈希方法和 mysql 的问题。我正在使用this answer中的Bcrypt类。

我正在创建登录脚本并检查,如果密码是 正确。我正在比较输入的密码和哈希 来自DB的密码。

$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是正确的,我总是得到'身份验证失败'。 任何想法,有什么可能是错的?

提前谢谢。

2 个答案:

答案 0 :(得分:1)

pass表中的users列不够宽,无法存储完整的哈希值;它应该至少60个字符宽,即VARCHAR(60)

顺便说一句,你应该查看PasswordLib,由ircmaxell编写和维护,这也很好地支持Bcrypt。

答案 1 :(得分:0)

尝试这样的事情:

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

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

看看它是否相等

如果是,请尝试这样的事情:

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

必须相等