使用PHP进行散列后无法验证密码

时间:2017-09-25 09:27:45

标签: php hash

我有一个问题。我正在使用PHP对我的密码进行哈希处理,但是当我验证它时它给出了以下消息。

  

注意:未定义的变量:第2行的/opt/lampp/htdocs/test/verify.php中的liXZkG452
  失败

我正在解释下面的代码。

hash.php

<?php
$password="subhra123@";
$hash = password_hash($password, PASSWORD_BCRYPT);
echo $hash;
?>

以上echo正在提供此$2y$10$liXZkG452/DQjB7TsIHEzuJ/ovi0L3.xwN1uYeqt.kFYma33Uu9Wq值,我将再次在下面的文件中进行比较。

verify.php

<?php
$hash="$2y$10$liXZkG452/DQjB7TsIHEzuJ/ovi0L3.xwN1uYeqt.kFYma33Uu9Wq";
$password="subhra123@";
if (password_verify($password, $hash)) {
    echo 'login';
}else{
    echo 'Failed';
}
?>

上述功能给了我这个问题。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

您需要在$hash变量周围使用单引号字符串而不是双引号字符串,因为PHP会将$解释为双引号字符串中的变量标识符。然后它会假设接下来的是变量名称(这就是为什么你得到“ Undefined variable .. ”的通知)。字符串中前两个$实例不会被这样处理,因为它不是有效的变量名(以数字开头)。

下面会输出“login”,因为$hash现在引用了单引号。

$hash = '$2y$10$liXZkG452/DQjB7TsIHEzuJ/ovi0L3.xwN1uYeqt.kFYma33Uu9Wq';
$password = "subhra123@";
if (password_verify($password, $hash)) {
    echo 'login'; 
} else {
    echo 'Failed';
}