【发布时间】:2012-02-28 11:27:15
【问题描述】:
我有一个刚刚开始的登录脚本。输入新密码时,首先使用 MD5 加密,然后存储在数据库中。
当我在登录表单中输入用户名和密码并提交时,我正在尝试根据 $_POST 变量验证存储的密码,如下所示:
$username = $_POST['username'];
$password = md5($_POST['password']);
//database stuff here
$q = mysql_query("SELECT * FROM Users WHERE username='$username'");
while ($row = mysql_fetch_array($q))
{
if ($row['password'] == $password)
{
echo "Passwords match.";
}
else
{
echo "Password is incorrect.";
echo "<br />Entered password: " . $password;
echo "<br />Stored password: " . $row['password'];
}
}
这只是在测试阶段,所以为了简单起见,我尝试验证的密码是“密码”。如果我输出 $_POST['password'],我得到密码 - 但是,如果我输出存储在数据库中的 MD5 哈希值和 md5($_POST['password']),它们不匹配。后者有额外的字符。有人知道为什么会这样吗?
【问题讨论】:
-
1. MD5 是一个非常弱的算法,使用来自 SHA-2 系列的东西,例如。 SHA-256。 2. 给你的密码加盐。 3. 使用 PDO 和prepared statements 进行数据库连接。
-
感谢大家的提示!
-
@Crozin:当您使用它时,最好建议 bcrypt 或 PBKDF2 具有较高的迭代次数和每个密码的盐值,而不仅仅是散列和盐......
标签: php mysql encryption md5