【问题标题】:Why is hashed password not matching from value in database?为什么哈希密码与数据库中的值不匹配?
【发布时间】:2016-10-05 10:16:48
【问题描述】:

我有一个注册表,其sn-p如下-

$email=$_GET['email'];
$pass=$_GET['pass'];
$salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647));
        $password = hash('sha256', $pass.$salt);
        for($round = 0; $round < 65536; $round++) 
        { 
            $password = hash('sha256', $password.$salt);
        }
        mysql_query("INSERT INTO user_tbl(email, password, salt) VALUES ('$email','$password','$salt')");

对于一个特定的密码,后面的字符串被存储在 db-

df22e53c7fb2d599d64597a04fd28ca47bc79675ac50a2381c9a17fd4e07b263

现在我也有一个登录表单。谁的代码sn-p如下-

$email=$_GET['email'];
$pass=$_GET['password'];
$result=mysql_query("SELECT * from user_tbl where email='$email'");
$row=mysql_fetch_array($result);
$salt = $row['salt'];
$password = hash('sha256', $pass.$salt);
for($round = 0; $round < 65536; $round++) 
   { 
       $password = hash('sha256', $password.$salt);
   }
if(strcmp($row['password'],$password)!=0)
{
    echo "wrongpassword";
    exit();
}
else
{
    echo "Success";
}

现在我可以看到登录表单正在评估的哈希密码也是 df22e53c7fb2d599d64597a04fd28ca47bc79675ac50a2381c9a17fd4e07b263 。这与提交到数据库的注册表单相同。 他们应该匹配。但他们不是。字符串比较测试总是失败。 两个字段的长度,即密码和盐,每个都是 200,并且是 VARCHAR 类型,我认为这已经足够了,因为上面的算法只会生成一个 64 个字符的长字符串。还是什么问题?请帮帮我。

【问题讨论】:

  • 你为什么不直接使用 bcrypt(通过password_hash())?
  • 我认为我们能提供的最好帮助就是告诉你停止你正在做的事情。首先,使用 PHP password API 而不是尝试自己动手。其次,停止使用 mysql_* 函数,因为它们在几年前已被弃用并在 PHP 7 中被删除,与时俱进并开始使用 PDO。第三,您对 SQL 注入攻击持开放态度,因此在使用 PDO 时,我们还支持其准备好的语句。四、不要在URL中传递明文密码。
  • 不要开发自己的密码安全算法,除非您希望获得 Ashley Madison 以及几年前通过链接和 adobe 获得的那种宣传。不要重新发明瘪胎。使用 PHP 密码算法。它的设计有点面向未来,未来在网络骗子手中提供越来越便宜的计算机能力。说真的。

标签: javascript php mysql hash sha256


【解决方案1】:

您只需要对您的 IF 条件进行简单的更正:

if(strcmp($row['password'],$password)!==0) // change here :)
{
    echo "wrongpassword";
    exit();
}
else
{
    echo "Success";
}

请参阅文档:http://php.net/manual/en/function.strcmp.php

【讨论】:

    猜你喜欢
    • 2021-04-25
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多