PHP/SQL : Un-md5 a string

标签 php mysql md5

<分区>

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

关于PHP/SQL : Un-md5 a string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9753073/

相关文章:

php - 从 Laravel 中上传的文件中获取图像扩展名

php - 如何断言模拟对象的函数调用的对象参数

python - 无法使用python中的MySQLdb模块将unicode字符串输入MySQL

php - 具有自定义字段的实体

php - Laravel 4 union 生成错误的 SQL

php - 搜索结果中的特殊符号

mysql - 如何在 mysql schema 上进行协作?

excel - Excel中的MD5哈希函数?

python - 我如何知道 hashlib.md5 是否支持 'usedforsecurity' 标志?

c - 在 OS X 上生成 MD5 密码