2016-12-28 50 views
0

password_verify的大问题。Password_verify未正确检查

在我的数据库有一栏:

password: $2y$10$1k72g4qYgd4t5koC5hj8sOit3545GfO5EhaIwVRfIiA2/eC3Hnu5e ('b') 

当我想以检查此密码等于给我完全两种不同的codes.My代码字母A是:

$hash = password_hash('b', PASSWORD_DEFAULT); 
$pass = getPassword($email); 
echo $hash . ", " $pass; 

,这让我:

$2y$10$oJbeQqGSee.pLcBNxqRzUecoCGc9fin7IF.evDVanN1pjmtIINSD2, 
$2y$10$1k72g4qYgd4t5koC5hj8sOit3545GfO5EhaIwVRfIiA2/eC3Hnu5e 

为何有不同?

回答

1

您应该插入您的存储使用前password_hash(),然后当你确认你应该使用password_verify()

$pass = getPassword($email); 
$verify = password_verify('b', $pass); 

if ($verify) { 
    // passwords match 
} 
else { 
    // passwords do not match 
} 

参见:password-verify更多信息

2

这是因为当不是由用户指定,password_hash会随机生成。 Salt是在散列之前附加到密码的字符串。由于盐是随机的,两个具有相同密码的用户在数据库中仍然具有不同的哈希值。

的话题很好的总结,可以发现on the wikipedia

为了验证密码正确,你不应该手动比较哈希值,这可能与各使用password_hash因为随机盐的不同,但宁可使用功能password_verify