我遇到 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是正确的,我总是得到'身份验证失败'。 任何想法,有什么可能是错的?
提前谢谢。
答案 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]);
必须相等