news 2026/6/10 15:01:19

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

作者头像

张小明

前端开发工程师

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/6/10 12:25:03

基于LabVIEW的转子故障诊断系统:振动信号里的秘密探寻

labview程序设计,基于振动信号的转子不对中,不平衡故障诊断系统设计。 转子不平衡分类:质量不平衡。 转子不对中分类:平行不对中,角度不对中。 信号分析:时域分析,频域分析。 时域分析:无量纲参数分析,有量纲参数分析。…

作者头像 李华
网站建设 2026/6/10 16:16:45

vue基于Spring Boot的教职工教师教学科研档案管理系统_79v06k5e

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华
网站建设 2026/6/10 11:07:35

交互噪声(Interaction Noise):推荐系统中被忽视却关键的问题

在推荐系统中,模型学习的核心依据是用户–物品交互数据。然而,这些交互并不总能真实反映用户的内在偏好,其中夹杂的大量干扰信号被称为 交互噪声(Interaction Noise)。如果不加处理,交互噪声会显著降低推荐…

作者头像 李华
网站建设 2026/6/10 17:11:20

无刷直流电机双闭环仿真:稳定运行与制动工况下的调制探索

无刷直流电机稳定运行和制动工况双闭环仿真,PWM-ON-PWM,PWM-OFF-PWM调制方式。 图一为拓扑图,图二为调制方式,图三为转速和电磁转矩波形,图四和图五为三相电流和电磁转矩放大和整体图,换相区间电磁转矩幅值较小&#x…

作者头像 李华