此文章发布于 2000/01/01,部分内容可能已经过时,请谨慎甄别。

你已完成互动,可继续阅读此文章

众所周知,现在很多动态网站和APP都设有“找回密码”、“忘记密码?”等功能,以便用户在忘记账号的密码时快速重置密码。

20240808-66b44ab51d0df.jpg

那么问题来了,为什么“找回密码”功能不直接告诉我们原密码,而非要填写新密码呢?

表单互动

你知道为什么吗?

因为服务器根本不存储你的密码

表单服务由C点表单提供支持

服务器是如何存储你的密码的?

有人可能就会问了:这不是扯淡么?服务器怎么可能不存储我们的密码?如果它不存储密码,它又是怎么知道你的密码输对了没有呢?

这就要从一个算法开始讲起了。

哈希(Hash)算法是一种将任意长度的输入数据(如字符串、文件、数据包等)通过特定的算法转化为固定长度的输出数据的计算过程。这种输出数据被称为哈希值或哈希码,它具有不可逆的特性,高度的唯一性和确定性。即,你可以将一段文本转换成哈希码,但无法将一段哈希码重新转换成文本;且对于不同的输入数据,其哈希值几乎不可能相同,而对于相同的输入数据,其哈希值必定相同。

由于哈希算法的不可逆特性,使得用其加密密码等重要文本的安全性较高,所以现在的服务提供商一般都是不存储你的密码的,而是存储经过了哈希算法处理后的字符串。

那么,既然服务器也不知道密码,那它又

怎么校验输入的密码是否正确呢?

其实如果你有认真看前面有关哈希算法的介绍并且逻辑能力够强的话,你应该已经知道服务器是如何校验密码的了。没错,就是哈希值比对!

当你在客户端输入密码并请求登录时,服务器会将你输入的密码重新计算为哈希值,然后与数据库里面存储的哈希值进行比对,比对成功即为密码输入正确。