PHP:用户点击忘记密码后如何将原密码发送给用户,密码是md5加密的?

标签 php md5 flawed-concept

我正在使用 md5 加密我项目中的密码。

当用户点击忘记密码并提交他的电子邮件时,我必须将他的密码发送给他。

但是密码是使用md5加密的。生成新密码不应该做。因为在这个项目中管理员可以看到用户的所有详细信息。所以我必须向管理员出示原始密码。所以初始密码非常重要。那么我怎样才能解密密码或以任何其他方式将原始密码发送给他?

提前致谢...

最佳答案

哈希不是为解密而设计的,这就是为什么它们通常被称为“单向哈希”而不仅仅是哈希。

相反,要么...

  1. 生成一个新密码,对其进行哈希处理,存储新密码哈希值代替旧密码,并将新生成的密码通过电子邮件发送给用户。

  2. 生成新密码,对其进行哈希处理,将其存储在临时密码字段中,然后当用户使用该密码登录时,提示他们输入永久性新密码。

  3. 生成 nonce ,将其存储在随机数的字段中,并通过电子邮件向用户发送包含该随机数的链接,这将使他们能够访问页面以输入新密码。

第三个选项可能是最好的,因为它不会在阅读用户电子邮件的人的明显 View 中留下实际密码(临时的或非临时的),并且因为它使用随机数,一旦它被使用它不能被恶意用户再次使用。

对密码使用散列的原因是专门为了防止以恶意用户只需查看数据库即可确定密码的形式存储密码。

编辑:

“所以我必须向管理员出示原始密码。”

如果您要散列密码,这是不可能的。一般来说,允许管理员查看用户密码实际上是一个坏主意,因为很大一部分用户倾向于对多个事物使用相同的密码,而管理员对一个事物(例如,公司网络)可能不是许多其他事物(例如,用户的网上银行系统)的管理员。

MD5不是加密算法,是哈希算法。两者不一样;加密被设计为可逆的(因此补充术语“解密”),而散列仅被设计为单向的。

关于PHP:用户点击忘记密码后如何将原密码发送给用户,密码是md5加密的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2780198/

相关文章:

php - 在 php 中集成 paypal payout rest API 的过程是什么

c++ - exe 的 md5 没有给出预期的摘要

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

java - 什么时候可以使用instanceof?

Javascript 字符串到 int 数组

php - MySQL/PHP 删除表不工作

php - MySQL 插入损坏

php - PHP 中的抽象关键字

sql - 关于在数据库中保存密码的问题

hash - 如何在 Go 中获取十六进制编码的 md5 哈希