面试官:为什么忘记密码要重置,而不是告诉我原密码?

Hello,大家好,我是 Sunday。

最近有个同学在面试中遇到了一个很有意思的问题,我相信大多数的同学可能都没有遇到过。

面试官提问说:"为什么很多网站忘记密码需要重置,而不是直接告诉用户原密码?"

很有意思的问题对不对。很多网站中都有"忘记密码"的功能,但是为什么当我们点击忘记密码,经过一堆验证之后,网站会让我们重置密码,而不是直接告诉我们原密码呢?

所以,今天咱们就来说一说这个问题。

防止信息泄露

2022年11月1日,Termly 更新了《98个最大的数据泄露、黑客和曝光事件》(98 Biggest Data Breaches, Hacks, and Exposures)。其中包括很多知名网站,比如:Twitter

所以,你保存在网站中的数据可能并没有那么安全。那么这样的数据泄露后会对用户产生什么影响呢?

对大多数人来说最相关的经历(网上看到的)应该是诈骗电话,他们甚至可以很清楚的告诉你你的所有个人信息。那么这些信息是怎么来的呢?

有些同学可能说是因为"网站贩卖了我的个人信息",其实不是的。相信我 大多数的网站不会做这样的事情

出现这样事情的原因,大部分都是由于数据泄露,导致你所有的个人信息都被别人知道了。

那么,同理。既然他们可以获取到你的私人信息,那么你的账户和密码信息是不是也有可能被盗取?

而对于大多数的同学来说,为了防止密码太多忘记,所以很多时候 大家都会使用统一的密码! 也就是说你的多个账号可能都是同一个密码。所以,一旦密码泄露,那么可能会影响到你的多个账号,甚至是银行卡账号。

因此,对于网站(特别是一些大网站)来说,保护用户数据安全就是至关重要的一件事情。那么他们一般会怎么做呢?

通常的处理方式就是 加密 。并且这种加密可能会在多个不同的阶段进行多次。比如常见的:SHA256、加盐、md5、RSA 等等

这样看起来好像是很安全的,但是还有一个问题,开发人员知道如何解密他们。或者有些同学会认为 数据库中依然存在着正确的密码 呀?一旦出现信息泄露,不是依然会有密码泄露的问题吗?

是的,所以为了解决这个问题,网站本身也不知道你的密码是什么。

网站本身也不知道你的密码是什么

对于网站(或者其他应用)来说,它们是 不应该 存储你的原密码的。而是通过一些系列的操作来保存你加密之后的代码 。并且这个加密是在前端传输到服务端时 就已经进行了,并且是 不可逆 的加密操作,例如:MD5 + 加盐

我们举一个简单的例子:

比如有个用户的密码是 123456,通过 md5 加密之后是:E10ADC3949BA59ABBE56E057F20F883E

md5 理论上是不可逆的,所以从理论上来说这个加密后的代码是不可解析的。但是 md5 有个比较严重的问题就是:同样的字符串加密之后会得到同样的结果

这也就意味着:E10ADC3949BA59ABBE56E057F20F883E 代表的永远都会是 123456

所以,如果有一个很大的 md5 密码库,那么理论上就可以解析出所有的 md5 加密后的字符串。就像下图一样:

因此,在原有的 md5 加密之上,很多网站又增加了 加盐 的操作。所谓加盐指的就是:在原密码的基础上增加一些字符串,然后进行 md5 加密

比如:

  1. 原密码为 123456
  2. 在这个密码基础上增加固定字符"LGD_Sunday!"
  3. 得到的结果就是:"LGD_Sunday!123456"
  4. 然后用该字符进行 md5 加密,结果是:E1FC8CB7B54BED0FDC8711530236BA4D
  5. 此时尝试解密,会发现 解密失败

这样大家是否就可以理解,为什么很多网站在让我们输入密码的时候 ,要求包含 大小写+符号+ 字母 + 数字 了吧。本质上就是为了防止被轻松解密。

而服务端拿到的就是 "E1FC8CB7B54BED0FDC8711530236BA4D" 这样的一个加密后的结果。然后服务端再次对密码进行加密操作,从而得到的是一个 被多次加密 的数据,保存到服务端。

所以说:网站无法告知你密码,因为它也不知道原密码是什么。

目前很多网站或应用为了保证用户安全,都已经采取 扫码登录、验证码登录 等方式进行登录验证,这种无密码的方式,会更大程度的保证你的账号安全。

前端训练营:1v1私教,终身辅导计划,帮你拿到满意的 offer 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~

相关推荐
m0_5485147713 分钟前
前端Pako.js 压缩解压库 与 Java 的 zlib 压缩与解压 的互通实现
java·前端·javascript
AndrewPerfect14 分钟前
xss csrf怎么预防?
前端·xss·csrf
Calm55017 分钟前
Vue3:uv-upload图片上传
前端·vue.js
浮游本尊21 分钟前
Nginx配置:如何在一个域名下运行两个网站
前端·javascript
m0_7482398322 分钟前
前端bug调试
前端·bug
m0_7482329224 分钟前
[项目][boost搜索引擎#4] cpp-httplib使用 log.hpp 前端 测试及总结
前端·搜索引擎
新中地GIS开发老师29 分钟前
《Vue进阶教程》(12)ref的实现详细教程
前端·javascript·vue.js·arcgis·前端框架·地理信息科学·地信
m0_7482495432 分钟前
前端:base64的作用
前端
html组态38 分钟前
web组态可视化编辑器
前端·物联网·编辑器·web组态·组态·组态软件
~央千澈~1 小时前
如果你的网站是h5网站,如何将h5网站变成小程序-除开完整重做方法如何快速h5转小程序-h5网站转小程序的办法-优雅草央千澈
前端·apache