【发布时间】:2013-09-11 02:55:12
【问题描述】:
我正在为 Web 应用程序制作登录系统。为了在数据库中存储密码,我使用 sha256 对密码进行加密,如下所示:
$salt ="sometext";
$escapedPW="userpass";
$saltedPW = $escapedPW . $salt;
$hashedPW = hash('sha256', $saltedPW);
echo "<center>".$hashedPW."</center>";
在数据库中,我存储了用户、用户密码以及用于生成哈希和验证用户登录的盐。现在我正在做的功能是向用户发送一封包含您的密码的电子邮件,但是当用户收到电子邮件时,由于存储在 sha256 加密密码中,用户会收到一个长字符串而不是用户应该的密码要知道。
我的问题是有什么方法可以向您发送实际的用户密码而不是密码加密,即,如果我知道盐,有什么方法可以反转 sha256?如果不可能,建议您使用哪种加密方法来完成加密密钥的反向并通过电子邮件将实际密码发送给用户。
【问题讨论】:
-
哈希的全部意义在于您无法将其反转以获取原始值;您也不应该将原始密码发送给忘记密码的用户 - 您向他们发送一个一次性的、有时间限制的链接以重置他们的密码
-
哈希应该是不可逆的(至少在理想世界中)。如果您将密码恢复系统建立在反转您自己的哈希值的基础上,您应该重新考虑您在做什么。您基本上是在尝试破解自己。不过,对这个问题 +1,因为其他人可能有同样的疑问,你的问题很有用。
-
@Renan 不一定,用户必须在DB中,密码发到用户个人邮箱。
-
马克和我想说的是,当您想以永远不应该解密的方式加密一段数据时,您会使用哈希。然后存储结果。如果您散列另一条数据并得到相同的结果,那么它很可能等于您首先散列的原始数据。这就是哈希认证的工作原理。关键是,如果黑客复制了您的数据库,他将无法从哈希中反转用户的密码。有办法做到这一点,但你至少让脚本小子更难了。
-
您不会向用户发送随机密码;您在密码重置链接中向他们发送一次性令牌
标签: php login sha256 password-encryption