我正在使用ircmaxell编写的名为password_compat的脚本。我以为我正确地遵循了他的指示,但我似乎无法使用password_verify($password, $hash)
.
保存在我的数据库中的哈希密码是;
$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();
}
}
我像搅拌机建议的那样删除了 $hash。
谢谢你看:)