我已经阅读了很多文章,他们都讨论/建议如何将纯文本密码转换为散列密码并存储在数据库中。
我的问题是,如果明文密码被散列并存储在数据库中,那么如果用户忘记密码,我该如何检索原始明文密码?
我们不是像银行这样需要非常高安全性的金融应用程序。此外,我的应用程序要求我们在某种程度上登录并检查用户帐户。如果我们通过哈希来开始存储密码,有没有办法做到这一点?
答案 0 :(得分:5)
你没有。您应该执行此过程的唯一方法是使用他们可以记住的其他内容重置用户的密码。
当您对密码进行哈希处理时,您会通过算法运行明文,然后将算法结果存储到数据库中。要检查用户的密码是否正确(在下次登录时)是再次运行相同的算法并将输出与存储在数据库中的内容进行比较 - 即如果哈希匹配则用户的密码必须正确。
答案 1 :(得分:3)
你没有。就个人而言,我会尽可能避免使用可以恢复密码的网站,因为这意味着访问其哈希密码文件的黑客可以访问我的帐户。
您可以为用户提供设置新密码的工具,通常基于先前建立的地址的电子邮件或安全问题和答案。
答案 2 :(得分:3)
我的问题是,如果明文密码被散列并存储在 数据库然后如何检索原始明文密码 用户忘记密码?
您将密码哈希为不能够执行此操作。散列丢失信息,你可以做的最好的事情是计算散列的碰撞。
要比较存储的密码,您需要创建给定密码的哈希值,并将哈希值与存储在数据库中的哈希值进行比较。
如果用户忘记了密码,请为用户创建一个新密码:创建随机密码,将哈希值存储在数据库中,并将普通密码发送给用户。
答案 3 :(得分:1)
这取决于您用来散列密码的内容。但通常情况下,这是不可能的。 如果用户忘记了密码,那么你给他一个指向他可以更改密码的页面的链接,或者你给他一个你生成的临时密码。
答案 4 :(得分:1)
我不是用Java开发的,但通常,当我们使用哈希函数来加密我们的密码时,只有一个方向。因此,采用哈希意味着的“词”并不容易。
在这种情况下,解决方案是允许用户使用其他字段重置密码,例如电子邮件。
答案 5 :(得分:0)
你不是。这是行不通的。哈希映射是单向映射。您应该阅读一些关于哈希图,它们的作用以及它们有用的原因。
您无法从哈希值中恢复密码。