2013-04-26 47 views
0

我使用的脚本ircmaxell写道名为password_compat。我以为我正确地按照他的指示,但我似乎无法使用password_verify($password, $hash)验证我的密码验证。Bcrypt问题没有正确验证

保存在我的数据库中的散列密码是;

$2y$10$zYpSzIj7kTPv3H7wDI/uXSYqi1se46b38uumP6SM4XGMmsjU3q 

我使用PDO来抓取我的哈希密码,并使用password_verify($password, $hash)来比较登录表单发布。这是我的理解,BRCYPT不是一个哈希函数,所以password_verify($password, $hash)将做它的魔术。我不知道如何创建盐,但我认为它会为每个新密码创建一个自定义盐分,但是如何将它与我保存的密码进行比较来阻挡我。它如何匹配正确的盐和密码?这整个不存储在我的数据库中的盐类混淆了我,哈哈。这是我正在使用的代码;

bcrypt

if($login->verifyip($_SERVER['REMOTE_ADDR'])) 
{ 
    require_once 'password.php'; //password_compat supplied file 

    $username = $_POST['username']; 
    $password = $_POST['password']; 
    $dbpassword = $login->GetPassword($username); // pull saved password from db 

    // verify posted password with saved password 
    if(password_verify($dbpassword, $password)) 
    { 
     echo 'verified'; 
    } 
    else 
    { 
     echo 'not verified'; 
    } 
} 

PDO

public function GetPassword($username) 
{ 
    $passwordSQL = 'CALL get_password(:_user)'; // using stored procedure 
    try 
    { 
     $pdo = new PDO('my login stuff'); 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $password = $pdo->prepare($passwordSQL); 
     $password->bindParam(':_user',$username); 
     $password->execute(); 
     $fetch = $password->fetchColumn(0); 
     $password->closeCursor(); 
     return $fetch; 
    } 
    catch(PDOException $e) 
    { 
     return 'error' . $e->getMessage(); 
     exit(); 
    }   
} 

我删除$哈希像搅拌机建议。

感谢在看看:)

回答

2

password_verify的论点是周围的其他方法:

password_verify($password, $dbpassword) 

至于它是如何工作的,哈希是这样的形式:

$<algorithm>$<cost>$<salt>/<hash> 

所以从哈希:

$2y$10$zYpSzIj7kTPv3H7wDI/uXSYqi1se46b38uumP6SM4XGMmsjU3q 

您可以看到成本为10,盐为zYpSzIj7kTPv3H7wDI,而bcrypt(salt + password)uXSYqi1se46b38uumP6SM4XGMmsjU3q

password_verify从您提供的散列中提取信息,只是检查bcrypt(salt + password) == hash

+0

*巨大的面孔SMACK * - 哇,这让我惊讶于我对细节的关注。谢谢,像冠军一样工作! – Mike 2013-04-26 22:30:04

+0

你有没有看到我可以*调整*? – Mike 2013-04-26 22:31:05

+0

@Mike:你可以摆脱以'$ has = ...'开头的行。 – Blender 2013-04-26 22:31:57