PHP/SQL:Un-md5a字符串

PHP/SQL:Un-md5a字符串,php,mysql,md5,Php,Mysql,Md5,可能重复: 我有一个数据库来存储用户名、密码、电子邮件等。如果用户忘记了他/她的密码,我会将其发送到他们的电子邮件帐户 问题是我在将密码存储到数据库之前先将其加密到md5。如果用户的密码是ABC,我将其作为867dbd57e9ca9f808存储在数据库中。如果用户忘记密码,我无法发送用户“867dbd57e9ca9f808”。我需要发“ABC”。但是,这需要我“un-md5”字符串,我认为这是不可能的。md5不是加密,而是散列。也就是说,它是不可逆转的。无法从哈希中获取原始字符串 至于你的情况

可能重复:

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


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

md5不是加密,而是散列。也就是说,它是不可逆转的。无法从哈希中获取原始字符串


至于你的情况:像大多数网站今天做的那样。他们不会向您发送密码,而是向您发送一个链接,您可以使用该链接重置密码。通过这种方式,您不必存储纯文本密码并在电子邮件中发送它们。

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

比如:

myurl.com/passwordrecovery?token=someGeneratedToken
在数据库中,您可以查找令牌并获取用户id。例如,您的表结构可以如下所示:

user_id | token | expiry_time
若要在数据库中只保留令牌和到期时间,不要这样做将令牌与用户关联,否则用户可以请求更改密码,他将获得以下链接(不要这样做):

通过这种方式,他可以通过替换用户id来更改其他人的密码,并访问他的帐户。有效期不得超过24小时

重要的 不要使用普通md5,它很容易破裂。举个例子

PHP实现: ,

对字符串进行哈希运算的全部目的是使实际密码很难恢复

顺便说一句,为了提高数据库的安全性,您应该对密码散列进行“加密”,因为只要对密码文本进行MD5散列,使用散列的人就可以很容易地使用彩虹表获得密码


如果用户忘记了密码,请向他们发送一个链接,允许他们创建新密码。千万不要通过电子邮件发送密码,这是非常不安全的。

MD5不是一种加密算法

这是一种散列算法。它产生的不是其输入的加密形式;这是一个杂烩

哈希是一种单向转换。在数学中,有一个概念我们称之为“鸽子洞原理”。如果你有十只鸟和九只小熊来饲养它们,那么一定有一些小熊里面有不止一只鸟。类似地,如果您的密码长度为50,并且所有哈希值的长度都为20,那么必须有多个相同哈希值的密码-鸽子比洞多得多

由于有许多(事实上是无限多个)密码具有相同的散列,即使是暴力猜测方法也无法从散列中恢复原始密码(尽管它可能能够找到具有特定散列的密码,而不知道它是否是用户提供的密码)。原始信息已丢失

但是,您永远不需要向用户发送密码不要通过电子邮件向他们发送密码。一个例外是当用户需要重置密码时;在这种情况下,为他们生成一个新的临时密码/令牌,并将其提供给他们。然后强制他们在登录时立即设置新密码。理想情况下,您应该使用安全的通信工具(例如与站点的SSL连接),而不是不安全的电子邮件


您不应该关心用户的密码是什么,只要他们知道它即可。

以下是MD5的一个示例:

假设您想要“md5”这个词“bar”

假设现在md5接受字符串中的每个字母,为每个字母分配一个值,并对得到的所有数字求和

b被分配到2(字母表的第二个字母…)
a被分配给1
r被分配到18

总数是21

您无法得到相反的值,因为使用我的伪md5函数,“arb”、“rab”、“ggg”也会给出21


这就是为什么md5是一个单向函数的原因。

md5
不是你说的“加密”,而是“哈希”也使用salt,不要只是哈希。如果他们忘记了密码,让他们重置密码;永远不要通过电子邮件发送纯文本密码。而且,MD5是单向散列;如果没有暴力字典或类似的攻击,就没有回头路。只有使用MD5,要找到一个哈希到同一个摘要的字符串就不是那么容易:)@SergioTulentsev Agree。我只是想简单地解释一下它是如何工作的。我觉得很多人在使用这种功能时根本不知道幕后会发生什么。是的,我也有同样的感觉。这是可悲的。
myurl.com/passwordrecovery?token=token&user_id=number