我使用的脚本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();
}
}
我删除$哈希像搅拌机建议。
感谢在看看:)
*巨大的面孔SMACK * - 哇,这让我惊讶于我对细节的关注。谢谢,像冠军一样工作! – Mike 2013-04-26 22:30:04
你有没有看到我可以*调整*? – Mike 2013-04-26 22:31:05
@Mike:你可以摆脱以'$ has = ...'开头的行。 – Blender 2013-04-26 22:31:57