将散列与散列的mysql密码进行比较时出错(输出值相等)

时间:2011-07-20 00:32:10

标签: php mysql hash string-comparison

我试图将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

有什么想法吗?

5 个答案:

答案 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值最后有一个额外的空间。它是我手动添加到数据库的测试用户,在复制和粘贴散列密码时以某种方式获得了额外的空间。

不确定这是否适用于您的情况,但我认为无论如何我都会分享。