php - PHP:当用户点击忘记使用md5加密的密码时,如何将原始密码发送给用户?

我正在使用md5加密我的项目中的密码。
当用户点击忘记密码并提交他的电子邮件时,我必须将他的密码发送给他。
但是密码是用MD5加密的。不应该生成新密码。因为在这个项目中,管理员可以看到用户的所有详细信息。所以我必须向管理员显示原始密码。所以初始密码非常重要。那么,我如何解密密码或任何其他方式发送给他原始密码?
提前谢谢…

最佳答案

散列不是为解密而设计的,这就是为什么它们通常被称为“单向散列”而不仅仅是散列。
相反,要么……
生成一个新密码,散列,将新密码散列存储在旧密码的位置,并将新生成的密码通过电子邮件发送给用户。
生成一个新密码,散列它,将其存储在临时密码字段中,然后当用户使用该密码登录时,提示他们输入一个永久的新密码。
生成一个nonce,将其存储在nonce的一个字段中,并通过电子邮件向用户发送一个带有该nonce的链接,该链接将允许用户访问一个页面以输入新密码。
第三个选项可能是最好的选择,因为它不会在用户阅读电子邮件时给用户留下一个真实的密码(不管是否是临时的),而且由于它使用了nonce,一旦被恶意用户使用,它就不能再被恶意用户使用。
散列用于密码的原因是为了防止它们存储在恶意用户只需查看数据库就可以确定密码的表单中。
编辑:
“所以我必须向管理员显示原始密码。”
如果你正在散列密码,这是不可能的。一般来说,允许管理员查看用户的密码实际上是个坏主意,因为很大一部分用户倾向于将同一个密码用于多个事务,而一个事务(比如,公司网络)的管理员可能不是许多其他事务(比如,用户的网上银行系统)。
md5不是加密算法,而是散列算法。两者并不相同;加密被设计为可逆的(因此补充术语“解密”),而散列被设计为单向的。

本文翻译自 https://stackoverflow.com/questions/2780198/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 php md5 flawed-concept


相关文章:

php - CodeIgniter中的MySQL INSERT和SELECT

nginx - PHP-FPM:不允许操作

php - PHP脚本,用于检查目录中所有文件的SHA1或MD5哈希是否与从XML文件中抓取的校验和相对应;递归循环

java - 什么时候可以使用instanceof? [关闭]

java - 将数据获取到Android应用程序的最佳方法?

php - PHP,从无限类别表中删除类别

php - Laravel 5全球数据访问器

postgresql - api属性文件中的MD5哈希数据库密码

python - MD5 Python蛮力错误

javascript - Javascript字符串到int数组