2010-12-13 110 views
5

我有md5格式的密码数据库项,但是当用户使用“忘记密码”时,我该如何给他/她所需的密码?我有md5加密密码,当他使用“忘记密码”时如何给用户提供密码?

+1

Oblig。 nitpick:MD5函数是* hashing * - 信息从结果中丢失,原始数据不可恢复。使用*加密* OTOH,可以使用正确的密钥完全恢复原始数据。 – Piskvor 2010-12-13 11:49:24

+0

可能重复[是否可以解密md5哈希?](http://stackoverflow.com/questions/1240852/is-it-possible-to-decrypt-md5-hashes) – 2013-01-07 23:26:34

回答

12

你不能从MD5哈希中做到这一点;你也不应该能够。密码恢复应该是棘手的。

通常的过程是发送一个密码重置令牌(URL)到他们的电子邮件地址,以便用户可以选择一个新的密码。

+0

谢谢@Marcelo Cantos – 2011-11-17 09:51:35

2

如果不将密码放在数据库中,这是不可取的,但您可以生成一个新密码并发送给他们。或者他们可以重置密码的链接。

1

给出密码的长度,您有1/100的机会恢复该密码(字典方法)。我不会推荐它。

最好生成一个新的随机密码,并将其发送给用户的电子邮件。

+0

远远低于实际上,这就是整个散列点:简单而快速的一种方法(数据散列),复杂和非常缓慢(正如在“正确完成时几乎不可能”)在另一个方向(散列到数据)。 – Piskvor 2010-12-13 11:52:40

+0

@Piskvor其实这只是我的估计。 :P它将取决于使用的字典。 – Ruel 2010-12-13 11:53:52

+0

如果您获得1/100的回收率。你有一个非常不安全的系统。事实上,您可以使用各种md5 de /编码器测试您自己的系统的恢复速率。拍摄0%的恢复。 http://www.md5decrypter.com/ – DampeS8N 2010-12-13 12:37:01

2

您必须发送new password给用户,然后再设置到数据库中。否则原始密码可能无法恢复。

谢谢。

3

您不能 - MD5仅仅是一种“单向”散列 - 不是加密数据的手段,可以随后对其进行解密。

因此,总的思路是:

  1. 向用户发送电子邮件给他们的注册地址与它重置链接。 (以证明他们实际上拥有该地址)。重置链接应该包含基于其特定用户数据的某些方面的散列,因此不容易被猜出等(例如:帐户创建时间。)

  2. 当用户点击链接时,他们登录密码重置页面,检查上面的散列,生成一个新的密码(理想情况下是上/下和一些数字字符的混合,虽然我总是倾向于忽略字符,如'0',' o','O'等),然后通过电子邮件向用户发送新密码,建议他们尽快更改密码。

用户可以按照惯例登录并访问该网站。

+0

我只是跳过发送新密码的第二封电子邮件。让用户直接从该链接更改密码。 – Danosaure 2010-12-13 16:55:03