2010-10-26 193 views
5

我想为我的网站实现一个忘记密码功能。我使用sha1对密码进行哈希处理。我将如何恢复这个用户?密码恢复与sha1密码散列

实施这个的最佳方法是什么?

+1

dupe:http://stackoverflow.com/questions/3615408/php-dehashing-the-密码等 – Anon 2010-10-26 17:16:44

+0

[PHP:如何在用户点击忘记密码时将原密码发送给用户通过使用md5?](http://stackoverflow.com/questions/2780198/phphow-to-send-the-original-password-to-the-user-when-he-clicks-forgot-password) – meagar 2010-10-26 17:23:02

回答

29

简短的回答,你不能。

您要执行密码重置函数,而不是密码检索函数。散列密码的重点在于您无法存储用户的密码,如果丢失,则无法恢复。

This应该给你如何让用户重置忘记的密码一个粗略的想法:

+6

不仅他不能这样做。更确切地说,他不应该能够做到这一点。否则散列根据定义将是无用的。 – ITroubs 2010-10-26 17:17:06

+2

织补。我应该去了简短的回答:) – 2010-10-26 17:18:15

+0

谢谢你。所以,重置密码是有道理的。谢谢! – BigMike 2010-10-26 22:55:44

8

最好的方法是不要尝试恢复原始密码。如果用户丢失密码,则生成一个新的随机密码,并使用带外方法将其发送给他们(例如电子邮件)。请记住,密码散列的整个目的是防止恢复。

我知道,我知道,电子邮件是不安全的。但是,如果您要求用户立即更改生成的密码,那么风险将得到缓解。顺便说一句,我不能推荐足够的,你也可以提供密码并迭代散列,以防止攻击者获得散列值时发生暴力攻击。

3

NO

有一个恢复SHA1哈希它没有已知的有效方法是原文(因为它是通过设计一个单向函数)。如果您希望稍后能够向用户显示其密码,您将将其存储在可逆的方法(IE加密,明文)中。这仍然可能是一个坏主意,试图找到一个better way of doing it

+0

什么是回复sha1哈希的无效方法? :) – 2010-10-26 17:22:11

+0

@George Rainbow Tables可以在简单的简单密码上运行得很好,但是如果哈希值是盐或包含符号,那么您可能无法将其反转。 – 2010-10-26 17:23:49

+0

@乔治 - 蛮力:) – Ishtar 2010-10-26 17:24:45