2017-09-25 101 views
2

我遇到问题。我正在使用PHP散列我的密码,但是当我验证它时,它给出了以下消息。使用PHP哈希处理后无法验证密码

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

我解释下面我的代码。

hash.php

<?php 
$password="[email protected]"; 
$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="[email protected]"; 
if (password_verify($password, $hash)) { 
    echo 'login'; 
}else{ 
    echo 'Failed'; 
} 
?> 

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

+7

您应该使用singlequotes''',而不是双引号。你在双引号中有'$'变量标识符,所以PHP认为它实际上是一个变量。使用单引号可以规避这一点。 – Qirel

+0

@Qirel:完美,谢谢。我可以知道什么错误? – subhra

+1

就像我所说的,'$'是变量标识符。所以PHP认为'$'之后的任何东西都是变量名称。在双引号中,PHP使用变量,但不使用单引号。 – Qirel

回答

2

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

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

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