【问题标题】:Comparing MD5 hashed passwords is not working比较 MD5 散列密码不起作用
【发布时间】:2016-06-19 13:54:50
【问题描述】:

所以我刚刚了解了在 PHP/MySQL 中使用 MD5 哈希和盐存储密码。我使用的方法是md5(md5($row["id"].$password)),所以salt 是我的SQL 表中用户ID 的MD5 散列(它是一个自动递增的INT),它连接到输入的密码字符串,然后重新散列。

我遇到的问题是,当我尝试创建一个测试帐户,然后使用测试帐户登录时,我在登录时生成的哈希与我在创建帐户时创建的哈希不匹配。

登录代码:

<?php

$login = mysqli_connect("hiding this info for obvious reasons");

if ($_POST["login"])
{

    $email = $_POST["email"];
    $password = $_POST["passsword"];

    $query = "SELECT * FROM useraccs WHERE email='$email'";

    if ($result = mysqli_fetch_array(mysqli_query($login,$query)))
    {
        $hashpass = md5(md5($result["id"]).$password);

        if ($hashpass == $result["password"])
        {

            $errors = "Logged in succesfully.";

        }

    }
    else
    {
        $error.= "E-mail/Password do not match anything in our database.";
    }

}

?>

注册码:

<?php

$login = mysqli_connect("hiding this info for obvious reasons");

if ($_POST["submit"])
{

    $username = $_POST["username"];
    $email = $_POST["email"];

    $query = "INSERT INTO useraccs (username,email) values('$username','$email')";

    mysqli_query($login,$query);

    $query = "SELECT id FROM useraccs WHERE username='$username'";

    $userid = mysqli_fetch_array(mysqli_query($login,$query))["id"];

    $password = md5(md5($userid).$_POST["password"]);

    $query = "UPDATE useraccs SET password='$password' WHERE username='$username'";

    mysqli_query($login,$query);

}

?>

如您所见,我在两种情况下对密码进行哈希处理的方式是相同的,并且我已经完成了测试以确认在两种情况下我得到的 ID 值相同。我真的很困惑为什么我没有得到匹配。

我想提一下,我对使用 MySQL/创建登录系统非常陌生,所以如果我做错了什么或遗漏了重要信息,请告诉我。

【问题讨论】:

标签: php mysql passwords md5


【解决方案1】:

首先,请查看 cmets 中的警告,您的代码非常不确定。

关于md5:你正在使用

mysqli_fetch_array(mysqli_query($login,$query))["id"];

这将始终返回一个数组。确保只获取该字段。

【讨论】:

    猜你喜欢
    • 2020-10-05
    • 2021-04-10
    • 1970-01-01
    • 2015-02-09
    • 2017-06-20
    • 1970-01-01
    • 2012-11-01
    • 2016-11-03
    • 2014-09-09
    相关资源
    最近更新 更多