簡體   English   中英

比較MD5哈希密碼無法正常工作

[英]Comparing MD5 hashed passwords is not working

因此,我剛剛了解了如何在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 /創建登錄系統的新手,所以,如果我做任何公然錯誤的事情或遺漏了必要的信息,請告訴我。

首先,請查看注釋中的警告,您的代碼不確定。

關於md5:您正在使用

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

這將始終返回一個數組。 確保僅獲取該字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM