其实 , 这样保存密码还有一个问题 , 因为对于某个确定的散列函数 , 一个密码永远只能产生一个固定的散列值 , 比如说对于MD5来说 , 123456的散列值永远是e10adc3949ba59abbe56e057f20f883e , 那么攻击者只要看到e10adc3949ba59abbe56e057f20f883e , 就知道这个用户的密码是123456了 。 那么疑问来了 , 用户的密码千变万化 , 哪有这么容易就能通过散列值一眼看出来呢?你还别说 , 大部分用户的密码都特别弱 , 而且 , 密码与散列值的对应表是可以事先算好再从里面查的 , 比如说CrackStation.net这个网站上 , 我们就可以通过散列值来反查明文密码 , 把user2的密码散列值c33367701511b4f6020ec61ded352059 , 立马就查出来明文密码是654321了 。 实际上 , 对于任何8位或更短的密码 , 用散列值反查密码都是一秒钟的事情 , 因此对于弱密码来说 , 散列实际上是形同虚设了 。
怎么办呢?既然大部分用户的密码都很弱 , 那么我们可以人为地把它们变得“强”一些 , 比如说在用户的密码前面或者后面添上一串随机的字符 , 然后再计算散列值 , 这种方法叫做“加盐” 。 加盐之后 , 网站上的数据库就变成了这个样子:
文章插图
【网站是如何记住你的密码的?】在这里 , user1的密码123456后面被加上了一串随机字符QxLUF1bgIAdeQX , 然后将加长之后的密码123456QxLUF1bgIAdeQX再计算散列值 , 得到dc8cf9d551ac50a5f167645dfee178cd 。 当user1登录时 , 网站会先查出user1的盐 , 然后将用户输入的密码加上盐算出散列值 , 再与数据库中的散列值进行对比 。 由于每个账号的盐都是不同的 , 因此即便两个账号的密码一样 , 加盐之后算出的散列值也会不一样 , 而且 , 加盐后算出的散列值也无法轻易地通过事先计算出的对应表来反查出明文密码了 , 这大大增加了用户密码的安全性 。 应该说 , 加盐并散列是现在网站保存用户密码的基本要求 , 但实际上还是有太多太多的网站没有达到这样的要求 , 这些网站也就容易成为黑客的攻击目标 。
当然 , 加盐并散列也远远算不上完美 , 因为显卡上的GPU特别擅长计算散列值 , 要不然为什么有一阵子大家都用显卡来挖比特币呢 , 比特币的挖矿实际上就是计算大量的散列值 。 有了GPU甚至专门的计算设备 , 对散列值进行“暴力破解”也并非不可能 , 甚至加盐的散列值也可以在有限的时间内被破解 , 只是一般情况下攻击者没有必要花那么大的代价罢了 。 为了进一步提高用户密码的安全级别 , 还可以采用“慢散列”、“带密钥散列”等技术 , 对于这些技术的细节我们在这里就先略过了 。
说了这么多 , 对于普通用户来说 , 在账号密码方面应该注意些什么呢?大体来说有下面这几点:
1. 使用强度较高的密码 , 比如8位以上 , 包含大小写字母、数字和特殊字符
2. 对于不同的网站尽量使用不同的密码 , 至少不能全都使用一样的密码
3. 使用如两步登录等附加认证手段
以上内容就是网站是如何记住你的密码的?的内容啦 , 希望对你有所帮助哦!
推荐阅读
- 如何忘记你的前任?
- 空腹喝酒是大忌,酒前吃什么好?
- 这些生活中常见的东西,居然是科学未解之谜?
- 神秘的“鬼压床”究竟是什么?
- 雪梅的思想感情 雪梅的中心是什么
- 天冷手脚冰凉,是一种病吗?
- 习大大访英也要看的医疗机器人,到底是啥?
- 自相矛盾文言文翻译 自相矛盾文言文翻译是什么
- 欲钱买千年一世缘的生肖欲钱买千年一世缘是什么
- 餐厅服务生形象设计