我试图将mysql数据库中的哈希密码值与登录表单中输入密码的哈希值进行比较。
然而,当我比较这两个值时,它说它们不相等。我简单地删除了盐,然后测试了输出是什么,得到了相同的值
$password1 = $_POST['password'];
$hash = hash('sha256', $password1);
...connect to database, etc...
$query = "SELECT *
FROM users
WHERE username = '$username1'";
$result = mysql_query($query);
$userData = mysql_fetch_array($result);
if($hash != $userData['password']) //incorrect password
{
echo $hash."|".$userData['password'];
die();
}
...other code...
示例输出:
7816ee6a140526f02289471d87a7c4f9602d55c38303a0ba62dcd747a1f50361 | 7816ee6a140526f02289471d87a7c4f9602d55c38303a0ba62dcd747a1f50361
有什么想法吗?
答案 0 :(得分:3)
我遇到了完全相同的问题。 var_dump()
告诉我,我有两个具有相同属性的变量string(128)
。我能够使比较工作的唯一方法是将散列值转换为字符串:
$password1 = $_POST['password'];
$hash = (string)hash('sha256', $password1);
...
$userData = (string)mysql_fetch_array($result);
if($hash == $userData) {
//This should return true.
}
答案 1 :(得分:0)
尝试使用strcmp
。与==或!=的字符串比较很少进展顺利。
if(strcmp($hash, $userData['password']) != 0) {
//this would be where the password was incorrect.
}
由于某些原因,很可能将其视为一个数字并且无法进行比较。
答案 2 :(得分:0)
尝试切换!=到==并切换内容。喜欢这个
if($hash == $userData['password']) //incorrect password
{
//proc login...
}
else
{
echo $hash."|".$userData['password'];
die();
}
我不确定为什么会这样,但你可以肯定它会在我的情况下起作用
编辑:你的案子出了问题。 works for me答案 3 :(得分:0)
==是一个对象哈希码比较,你需要使用strcmp函数来比较字符串文字。
答案 4 :(得分:0)
不确定你是否解决了这个问题,但是我只是浪费了30分钟才遇到同样的问题。结果我的mysql值最后有一个额外的空间。它是我手动添加到数据库的测试用户,在复制和粘贴散列密码时以某种方式获得了额外的空间。
不确定这是否适用于您的情况,但我认为无论如何我都会分享。