[英]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.