所以我刚学会了在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 /创建登录系统的新手,所以如果我做了任何明显错误或遗漏了重要信息,请告诉我。
答案 0 :(得分:0)
首先,请参阅评论中的警告,您的代码非常不确定。
关于md5:您正在使用
mysqli_fetch_array(mysqli_query($login,$query))["id"];
这将始终返回一个数组。一定要只到场地。