2012-12-19 39 views
0

我遇到了问题bcrypt哈希方法和mysql。我正在使用this answerBcrypt类。验证失败,即使密码正确,使用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

'if($ isGood)'检查什么? – Ghostman

+5

[Bobby Tables'mother](http://xkcd.com/327/)想和你说一句 – PeeHaa

+0

@soul它会检查应用程序是否正常。目前失败。 – DaveRandom

回答

1

pass列在你的users表中是不够宽的存储的完整散列;它至少应该有60个字符,即VARCHAR(60)

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

+0

是的,你是对的。问题在于DB表格,我在找到答案之前找到了它。所以现在没问题。非常愚蠢的错误:( –

0

尝试这样:

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

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

而且看它是否等于

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

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

必须等于

+1

不幸的是,回声不同哈希的..不等于。 让说,密码是'测试',所以哈希将每次都是相等的,如果通过'测试'?我想,也许它是用盐.. –

+0

'$ row [0];//哈希密码,我echo $行[ 0],它显示正确的散列密码< - 所以,这是不正确的? – Damonsson

+0

问题是与数据库表,应该'varchar(60)'。谢谢你帮助我:) –