2012-12-19 62 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)'。謝謝你幫助我:) –