Possible Duplicate:
Is it possible to decrypt md5 hashes?
我有一个数据库来存储用户名、密码、电子邮件等。如果用户忘记了他/她的密码,我会将其发送到他们的电子邮件帐户。
问题是我在将密码存储到我的数据库之前将其加密为 md5。如果用户的密码是 ABC,我将其作为 867dbd57e9ca9f808 存储在我的数据库中。如果用户忘记密码,我无法发送用户“867dbd57e9ca9f808”。我需要发送“ABC”。但是,这需要我“取消 md5”字符串,我认为这是不可能的。
MD5被设计成hash,只有一种方式,否则就不是hash。您不应该向用户发送他的密码,但可以更改它。您应该生成一个 token ,将更改密码的链接发送到带有 GET 参数中的 token 的用户邮件。如果用户更改密码,则删除 token 。此外,您应该记住 token 必须有到期时间。
类似于:
myurl.com/passwordrecovery?token=someGeneratedToken
在数据库中,您可以查找 token ,并获取用户标识。因此,例如,您的表结构可能如下所示:
user_id | token | expiry_time
如果您希望在数据库中保留仅 token 和到期时间,不要这样做。 将 token 与用户相关联,否则用户可以请求更改密码,他将获得以下链接(不要这样做):
myurl.com/passwordrecovery?token=token&user_id=number
这样他就可以通过替换user_id来更改别人的密码。并访问他的帐户。过期时间不应超过 24 小时。
重要
不要使用普通的md5,它很容易被破解。使用 pbkdf2
例如。
PHP 实现:
PHP-Crypt-Lib
,
Pbkdf2 by inanimatt