news 2026/5/12 23:56:47

使用哈希函数存储密码时为什么要加“盐”?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用哈希函数存储密码时为什么要加“盐”?

作者:chen-true@qq.com

仅供学习交流,如有错误恳请指出!

===========================================

1)“盐”是什么

系统存储用户密码时,通常不会直接存储明文密码,而是存储密码的哈希值。更准确地说,存储的是h = H(密码+盐),而不是h = H ( 密码 )

在密码存储中:

·盐(Salt):是一段随机生成的额外数据,通常是若干字节的随机数,比如16字节、32字节。

·加盐:在对密码做哈希之前,把密码和盐组合起来再哈希。

这个盐是跟每个用户绑定的,一般是“每个用户一个随机盐”,存数据库时会把哈希值h和盐一起存储。并且盐可以明文存储在数据库里,不需要加密隐藏。

2)为什么要加盐?

之所以必须加盐,核心原因不是“把密码再变复杂一点”,而是防止离线攻击中的“批量复用”。

当我们存储密码的数据库泄露后,攻击者往往拿到的是一批哈希值。如果系统中存储的是h = H ( 密码 ),那么会有以下问题:

问题1:两个用户只要密码相同,哈希值就完全相同。攻击者不用破解就能判断“这两个人密码一样”,并且一旦破解出某个哈希值对应的明文密码,就能立即解锁所有同哈希值的账号(批量命中)。

问题2:攻击者可以提前把常见密码全部算出h = H ( 密码 )并存成表(一般叫做字典或彩虹表)。拿到我们的数据库密码哈希值后,只需要查表匹配哈希值,就有可能找到明文密码,成本极低。

更糟的是,这种预计算成果还能跨系统复用:只要别的系统也用同样的哈希算法且不加盐,攻击者的表就能继续用。

问题3:只要拿到哈希值,攻击者可以在自己本地机器上狂暴穷举密码,不会触发我们的登录限制、风控、验证码等,毫无阻力。

加入盐后,哈希变为h = H(密码+盐)。如果每个用户都有不同且随机的盐,那么即便大家使用同一个密码,最终哈希也会不同。攻击者想用字典爆破时,必须针对每个盐重新计算一遍,从“一份计算覆盖全部用户”变成“每个用户一份计算”,攻击成本被成倍放大。

需要强调的是:盐不需要保密,通常与哈希值一起存储。盐的作用不是隐藏密码,而是让每个用户的哈希值都独一无二,打碎预计算与批量复用。

在工程实践中,仅仅“加盐再用普通哈希(如MD5/SHA-256)”仍不理想,因为它们计算太快。实际应使用专门的密码哈希/派生算法(如Argon2id、bcrypt、scrypt、PBKDF2),在加盐的基础上进一步提高单次猜测成本。

3)为什么要叫做“盐”?

“盐(salt)”这个名字主要是来自比喻,不是因为哪个标准硬规定“必须叫盐”。我们可以从以下几个角度来理解:

1、最直观的角度:跟做饭一样的“加盐”

做饭时:

·有一盘菜 = 原始数据或者密码

·往里面撒盐 = 加入一小撮额外的东西

·虽然菜本身一样,但加盐的量和方式不同,味道就会不一样

对密码来说:

·同一个密码123456

·不同的盐:salt1和salt2

·计算H(123456+salt1)H(123456+salt2)得到的哈希值完全不同

所以“盐”这个词非常形象:同样的“菜”(密码),因为加了不同的“盐”,味道(哈希值)就不一样了。

2、“盐”还有“防腐、防坏”的含义

盐可以用来腌制、保存食物,防止腐坏。对应到安全领域:

·原始密码 = 容易“变质”的敏感东西

·盐 = 额外的防护手段

·加盐之后,密码的哈希值更难被“腐蚀”(破解)

所以“salt”这个词在英语里,本来就有“腌制、保护”的含义,用在密码学上也说得通。

3、“撒盐”等于“撒随机性”

想象我们在一张桌子上撒盐,盐粒落点是乱七八糟、不规则的。

密码学里,加盐也是往系统里加额外的随机性:

·不同用户对应不同的随机盐

·同一个密码,用在不同网站/不同环境里会产生完全不同的哈希值

·攻击者没法用一张预先算好的“万能表”搞定所有人

这跟现实中“撒一把盐,颗粒散落一地”很像:分布杂、难预测。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 2:32:23

哈希函数特性总结

作者:chen-trueqq.com 仅供学习交流,如有错误恳请指出! 哈希函数(Hash function),又称哈希算法、散列函数、杂凑函数、摘要算法等,是一种将任意长度的输入数据M,通过一个确定性的映…

作者头像 李华
网站建设 2026/5/9 1:53:51

python脚本攻击Easy File Sharing Web Server

Easy File Sharing Web Server 是一款轻量级的 Windows 平台文件共享工具,支持通过 Web 浏览器快速搭建文件传输服务,无需复杂配置即可实现局域网或公网的文件上传、下载、管理功能。安全风险这款工具曾被曝出多个高危漏洞,包括:缓…

作者头像 李华
网站建设 2026/5/12 4:05:34

信捷XDM PLC三轴可编程运动控制:打造灵活数控体验

信捷xdm plc三轴可编程运动控制程序,支持信捷XDM系列PLC 信捷TG765触摸屏 支持直线插补 ,圆弧插补,延时,等待输入ON,等待输入OFF,执行输出ON,执行输出OFF。可视化加工轨迹,支持电子手…

作者头像 李华
网站建设 2026/5/11 21:59:54

高斯变迹光栅滤波器模型建立及其FDTD模型与参考文献

高斯变迹光栅滤波器模型建立,fdtd模型参考文献光纤传感领域最近有个挺有意思的讨论热点——如何用高斯变迹光栅实现更干净的光谱响应。今天咱们就扒开这个黑盒子,用FDTD实战演练下这类滤波器的建模过程。先扔个结论:变迹本质就是给光栅结构加…

作者头像 李华