0
因此,我剛剛瞭解到使用MD5哈希和鹽在PHP/MySQL中存儲密碼。我使用的方法是md5(md5($row["id"].$password))
,所以salt是在我的SQL表(這是一個自動遞增的INT)中的用戶ID的MD5哈希,它與輸入的密碼字符串連接,然後重新哈希。比較MD5哈希密碼不起作用
我遇到的問題是,當我嘗試創建測試帳戶,然後使用測試帳戶登錄時,我在登錄時生成的哈希與我在創建帳戶時創建的哈希不匹配。
登錄代碼:
<?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 /創建登錄系統非常陌生,所以如果我做了任何明顯錯誤的或者遺漏了重要信息,請告訴我。
現在是2016年,你爲什麼使用md5作爲密碼? –
**危險**:您很容易受到[SQL注入攻擊](http://bobby-tables.com/)**,您需要[防禦](http://stackoverflow.com/questions/) 60174/best-way-to-prevent-sql -injection-in-php)自己從。 – Quentin
**危險**:您正在使用[不適合的哈希算法](http://php.net/manual/en/faq.passwords.php)並需要[更好地保護](https:// www。 owasp.org/index.php/Password_Storage_Cheat_Sheet)的用戶密碼。 – Quentin