每当新闻里又爆出“数百万用户密码泄漏”,你都会看到“加密盐”“bcrypt”“Argon2”这些名词被反复提及。到底什么是密码散列?它如何把你的密码变成谁也看不懂的一串字符?为什么加盐能让黑客吃尽苦头?本文用最直白的语言,从原理到攻防,带你一次看懂 密码散列 这一现代互联网安全基石。
密码到底是什么?
在继续深入之前,先确认一个常被忽略的起点:到底什么算“密码”?
- NIST 官方定义:一串由字母、数字、符号组成的字符,用于验证身份或获取加密密钥。
- 日常体验:从邮箱、社交平台到支付宝,输入 密码 似乎是最自然不过的步骤。
即便如此,大多数人对“我的密码是怎样被保存的”依旧一问三不知。事实上,存储方式才真正决定你被盗号的风险有多高。
为什么明文存储密码是一场灾难?
想象你新开了一家会员网站。用户递交“[email protected] / ilovecats2024!” 这对凭证。你有三种选择:
直接保存原文
- 一旦被黑客拖库,所有人都能直接看到“ilovecats2024!”
加密后保存
- 虽然没人能肉眼看到明文,但有密钥即可解密,仍存在单点故障。
进行 密码散列 后保存
- 把原文转成固定长度的随机字符串(哈希值),不可逆、无密钥,泄漏也读不出原密码。
几乎所有现代服务都会选第三点。
深入:什么是密码散列?
密码散列(Hash)= 把任意长度输入 → 通过单向函数 → 输出定长且不可逆的唯一“指纹”
核心特点:
- 确定性:“ilovecats2024!” 每次都会得到同一串哈希值。
- 单向性:无法通过哈希值反向推出原文。
- 雪崩效应:原文哪怕改动一个字符,结果会面目全非。
“那黑客拿到哈希怎么办呢?” 他们不是“解密”,而是“撞库”——提前把 123456、password、ilovecats 之类高频明文算成哈希,遇到泄漏数据集时快速匹配。
比比皆是的攻击手法
| 攻击名称 | 原理 | 防御重点 |
|---|---|---|
| 生日攻击 | 利用统计学“生日悖论”寻找碰撞 | 选长输出、高复杂度算法 |
| 碰撞攻击 | 两个不同密码生成同一哈希值 | 淘汰已被攻破的 MD5/SHA-1 |
| 暴力破解 | 穷举所有可能性 | 计算成本高,拖慢即可 |
👉 立即查看如何给自己的系统加装“减速器”让暴力破解望值兴叹
常见散列算法 2025 现状盘点
MD5
- 1991 年的老大哥,128 位输出,已可秒破。
SHA-1
- 160 位,Google 早在 2017 年实现碰撞演示,官方退役。
SHA-2 & SHA-3
- 256–512 位长度,无已知有效碰撞,目前主流。
bcrypt
- 默认加盐并动态调成本因子,即使硬件再强也能减速。
Argon2
- 2015 年密码破解竞赛冠军,抗侧信道 + 内存硬度,推荐配置首选。
避开撞库的杀招:加盐
所谓“盐”(Salt),就是给每个密码额外撒上一把独一无二的随机数据,再一起送进哈希函数。
没有盐会发生什么?
| 用户 | 明文密码 | 无盐 SHA-256 哈希开头(示例) |
|---|---|---|
| A | password123 | 482c... |
| B | password123 | 482c... |
攻击者提前算好常用密码的哈希表,一旦重合就能立刻批量中招。
加盐之后
| 用户 | 明文 | 32 字节随机盐 | 最终哈希开头 |
|---|---|---|---|
| A | password123 | 0xD4A7... | f7c1... |
| B | password123 | 0x9F3C... | a3ec... |
即使密码相同,哈希结果也不同,预先计算的“彩虹表”瞬间失效。
实战流程图:注册 vs. 登录
用户注册
- 用户提交
[email protected] + ilovecats2024! - 系统产生 16 字节随机盐
盐 + 密码→ Argon2 →哈希值- 入库:保存
盐与哈希,原文绝不落盘
用户登录
- 用户再次输入
ilovecats2024! - 系统读出对应
盐→ 同样 Argon2 计算 → 比对哈希 - 匹配就通过,不匹配拒绝
FAQ:3 分钟解除你对密码散列的所有困惑
Q1:加过盐就万无一失吗?
不是。盐只能阻止彩虹表;对付暴力破解还得靠算力减速、延长哈希时长,同时选用高安全级别算法(如 Argon2d)。
Q2:把盐和哈希存同一台数据库里,是不是等于白加?
盐本身不需要保密,它的作用是让同一原文变出不同结果。重点是把算法参数(例如 Argon2 的 memory、iterations)调高,拖慢攻击者。
Q3:用户忘记密码怎么办?
系统不会也不该存明文。正确做法是生成一次性重置链接,或发送验证码,让用户自行重设新密码后再走一遍加盐哈希流程。
小结:三件事帮你看懂 99% 的密码安全新闻
- 看到 “未加盐 MD5 泄漏” → 直接拉黑网站
- 看到 “bcrypt/Argon2 + 盐” → 可在心理给该网站打 80 分
- 看到 “开关到 Argon2,内存硬度 X MB” → 代表该团队连暴力破解的硬件成本都考虑到了,基本靠谱
核心关键词回顾:密码散列、加盐、bcrypt、Argon2、暴力破解、生日攻击、哈希函數、彩虹表、明文凭据、密钥推导。