【问题标题】:Authentication failed, even password is correct, using bcrypt hash method验证失败,即使密码正确,使用 bcrypt 哈希方法
【发布时间】:2012-12-19 13:23:30
【问题描述】:

我在使用 bcrypt 哈希方法和 mysql 时遇到问题。我正在使用来自this answer 的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 是正确的,我总是得到“身份验证失败”。 任何想法,有什么问题?

提前谢谢你。

【问题讨论】:

  • if($isGood) 检查什么???
  • Bobby Tables' mother 想和你谈谈
  • @soul 它检查应用程序是否良好。目前它失败了。
  • 不知何故我想$bcrypt->hash 没有用于创建存储在数据库中的值。我对吗? )
  • 你当然有Bcrypt类?

标签: php mysql login bcrypt


【解决方案1】:

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

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

【讨论】:

  • 是的,你是对的。问题出在数据库表上,我在你回答之前就找到了。所以现在可以了。非常愚蠢的错误:(
【解决方案2】:

试试这样的:

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

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

看看是否相等

如果是,请尝试以下方法:

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

必须相等

【讨论】:

  • 不幸的是,回显不同的哈希值......不相等。假设密码是'test',所以每次哈希都相等,如果pass是'test'?我在想,也许是加盐的东西..
  • $row[0];// hashed password, I echo $row[0] and it shows correct hashed password
  • 问题出在 DB 表上,应该是 varchar(60)。谢谢你帮助我:)
猜你喜欢
  • 2014-05-26
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 2022-06-13
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多