比较MD5哈希密码不起作用

时间:2016-03-05 20:38:30

标签: php mysql passwords md5

所以我刚学会了在PHP / MySQL中存储MD5哈希和salt的密码。我使用的方法是(<span> <span class="lambda">lambda</span> </span>x (+ x 1)),因此salt是我的SQL表中用户ID的MD5哈希值(这是一个自动递增的INT),它连接到输入的密码字符串,然后重新散列。

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

登录代码:

md5(md5($row["id"].$password))

注册码:

<?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.";
    }

}

?>

正如您所看到的,我在两种情况下对密码进行散列的方式是相同的,我已经进行了测试以确认在两种情况下我都获得了相同的ID值。我真的很难过为什么我没有得到一场比赛。

我想提一下我使用MySQL /创建登录系统的新手,所以如果我做了任何明显错误或遗漏了重要信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

首先,请参阅评论中的警告,您的代码非常不确定。

关于md5:您正在使用

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

这将始终返回一个数组。一定要只到场地。