0

我遇到了bcrypt hash method 和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 是正确的,我总是得到“身份验证失败”。任何想法,有什么问题?

先感谢您。

4

2 回答 2

1

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

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

于 2012-12-19T14:23:52.420 回答
0

尝试这样的事情:

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

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

看看它是否相等

如果是,请尝试以下操作:

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

必须相等

于 2012-12-19T13:38:19.640 回答