PHP/SQL:Un-md5一个字符串

use*_*817 3 php mysql md5

可能重复:
是否可以解密md5哈希?

我有一个用于存储用户名,密码,电子邮件等的数据库.如果用户忘记了他/她的密码,我会将其发送到他们的电子邮件帐户.

问题是我在将密码存储到数据库之前将密码加密到md5.如果用户的密码是ABC,我将其作为867dbd57e9ca9f808存储在我的数据库中.如果用户忘记了密码,我就无法发送用户"867dbd57e9ca9f808".我需要发送"ABC".但是,这需要我"un-md5"字符串,我认为这是不可能的.

Rob*_*bik 10

MD5被设计为哈希,这只是一种方式,否则它不会是哈希.您不应该向用户发送密码,但可以更改密码.您应该生成一个令牌,发送链接以使用GET参数中的令牌将密码更改为用户的邮件.如果用户更改密码,请删除令牌.此外,您应该记住,令牌必须有到期时间.

就像是:

myurl.com/passwordrecovery?token=someGeneratedToken
Run Code Online (Sandbox Code Playgroud)

在数据库中,您可以查找令牌并获取用户ID.例如,您的表结构可能如下所示:

user_id | token | expiry_time
Run Code Online (Sandbox Code Playgroud)

如果您保留数据库中的令牌和到期时间,请不要这样做.将令牌与用户关联,否则用户可以请求更改密码,并且他将获得以下链接(不要这样做):

myurl.com/passwordrecovery?token=token&user_id=number
Run Code Online (Sandbox Code Playgroud)

这样他就可以通过替换user_id来更改别人的密码.并访问他的帐户.到期时间不应超过24小时.

重要

不要使用普通的md5,它很容易破解.用pbkdf2例如.

PHP实现: PHP-Crypt-Lib, Pbkdf2 by inanimatt