我需要一个旧密码(未散列)来发送给用户,但没有看到一个好主意?我阅读了文档,只有一种方法可以获取散列密码。我该怎么做才能获得真实密码?
4 回答
密码在经过哈希处理后永远不应该恢复干净,而且大多数情况下甚至是不可能的。我绝对建议您提供重置密码链接而不是提供旧链接。
带有 MD5、SHA1、SHA2、Blowfish 和其他密码的散列密码是一种加密方式,这意味着您不应该能够解密它们,因此使它们变得安全(第一个实际上并不那么安全,但这不是主题)。
无法获取原密码;这就是使用哈希的意义所在。
如果用户需要一个新密码,则生成一个一次性、短暂的随机字符串,并将其作为 URL 的一部分通过电子邮件发送给他们。当他们点击链接时,提示他们输入新密码。
有关如何尽可能安全地执行此操作的更多建议,请参阅OWASP 忘记密码备忘单。
你不能。Kohana 中的散列密码很可能是使用单向加密加密的密码。我的意思是你不能解密它并以明文形式获取它。您不应以明文形式存储应用程序密码以保护用户。
http://en.wikipedia.org/wiki/Cryptographic_hash_function
您可以做的是为用户生成一个新的临时密码并将其发送到用户的电子邮件,但我认为重置密码链接是最好的解决方案。
您无法恢复旧密码(未散列),因为它未存储在数据库中。仅存储其哈希值。散列无法解密(这就是为什么它被称为散列) ORM 使用这种模型来解决很多安全问题。
发送原始密码是真正的坏主意。如果你还想这样做:
- 如果您在注册过程中自己生成密码(然后将其邮寄给用户并保存)
- 如果用户正在设置他们的密码。您将把它作为 POST 变量。在将其保存到数据库的同时,也将其邮寄。
- 如果用户使用忘记密码来恢复他们的密码。然后首先重置密码(生成一个新密码并将其保存到数据库)并将其发送给用户。