哈希密码PHP登录不起作用


Hashing a password PHP Login not working

我最近开始使用MYSQL和PHP制作登录/注册系统,但我遇到了一个问题,我在注册时对密码进行了散列处理,但在登录时,它无法工作,说密码不正确。

http://snap.binarypaw.com/gc53h3w0.png<--寄存器代码http://snap.binarypaw.com/1qhsyeyw.png<--登录代码

如果有人有任何答案,我将非常高兴。

编辑

此域上的链接现在已失效。对于给您带来的不便,我深表歉意。

在登录代码中,您需要将输入密码的MD5哈希版本与您存储的MD5散列版本进行比较。如果散列匹配,则密码匹配。

实现这一点的最简单方法是在比较之前对输入的密码进行散列,方法与注册代码中的方法完全相同:

$query = "SELECT user,pass FROM members WHERE user='$user' AND pass='".md5($pass)."'";

编辑:请记住,这将直接回答您的问题。然而,迈克在上面的评论中提出了一个非常正确的观点。MD5不是密码散列的好选择,因为它很弱。此外,你没有在你的杂碎上撒盐。强烈建议同时进行这两项更改,以帮助保护用户的安全。右边的一些相关问题,比如这个问题,值得一看。

其他答案为您的特定问题提供了直接的解决方案,但我将详细介绍您的代码背后的安全性,仅供您和其他人参考。请随意添加或根据需要更正我。

md5中存储密码是不允许的。这是因为md5哈希算法可以很容易/快速地进行暴力强制。此外,您还可以使用mysql_函数,这些函数已被弃用。您应该使用PDO(或者或者mysqli_函数)。幸运的是,您对数据进行了清理,但这些功能已不再维护,因此我建议您进行切换。

这是一个关于用PDO和SALT创建基本登录系统的好教程。我强烈建议您对其进行审查,并使用这样的方法重新实现您的登录系统,原因如下:

  • 它将保护您免受SQL注入攻击
  • 它在密码中添加了一个SALT,这使得每个哈希都是唯一的,这使暴力技术变得复杂(有关它为什么这样做的详细信息,请参阅本页)
  • 它使用了更强的哈希算法(sha256),并多次重复(这也有助于通过增加登录时间来抵御暴力攻击-更多信息)

一般来说,如果您有机会在不给用户带来不合理不便的情况下为系统增加更多安全性(如存储SALT和使用强哈希算法),请提前抓住机会,减少您未来面临的头痛。

希望这能有所帮助!

在where子句中散列您的密码。

WHERE user ='$user' and pass=md5('$pass')

在构建查询字符串之前,请确保$user和$pass经过了适当的清理。

正如Mike在评论中指出的那样,md5对于哈希密码来说是一个薄弱的选择。

可在此处找到替代哈希算法https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html

$pass = md5($pass);

也不要使用mysql_*,因为它已被弃用。

在登录代码中,您需要在查询数据库之前对输入进行散列。插入行:

$pass = md5($pass);

$query =行之前。