哈希
MD5、SHA、bcrypt
哈希 是 CoddyKit 上的免费 Ethical Hacking Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ethical Hacking Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ethical Hacking Academy 课程共包含 4 节课。
什么是哈希
哈希函数接受任意大小的输入,并生成固定大小的输出,称为摘要。相同的输入始终会生成相同的摘要。
关键在于,哈希是一种单向操作。您无法通过数学方法将摘要逆向还原为原始输入。这正是哈希区别于编码和加密的地方。
良好哈希的属性
密码哈希函数应具备以下特性:
- 确定性:相同输入产生相同输出。
- 计算速度快(对于通用哈希而言),但密码哈希最好应当较慢。
- 抗原像攻击:给定摘要后,无法找到对应的输入。
- 抗碰撞:难以找到具有相同摘要的两个输入。
- 雪崩效应:一个比特发生变化时,约一半的输出比特会翻转。
MD5
MD5 会生成 128 位(32 个十六进制字符)的摘要。它速度快,历史上也很常见,但在密码学上已经被攻破:现实中存在可行的碰撞攻击。
绝不要将 MD5 用于安全用途。您仍会在文件校验和旧系统中遇到它,因此它在安全评估期间经常成为攻击目标。
echo -n 'password' | md5sum
# 5f4dcc3b5aa765d61d8327deb882cf99SHA 家族
SHA(安全哈希算法)家族更加稳健:
- SHA-1:160 位。现在被认为已经不安全(碰撞攻击“SHADOW HAMMER”/ SHAttered)。请避免使用。
- SHA-2:包括 SHA-256 和 SHA-512。应用广泛,目前仍然安全。
- SHA-3:基于 Keccak 的较新设计,是 SHA-2 的替代方案。
echo -n 'password' | sha256sum
# 5e884898da28047151d0e56f8dc629...哈希不是加密
加密可以使用密钥进行逆向还原,而哈希完全不可逆。这正是哈希被用于存储密码的原因:服务器永远不需要原始密码。
您登录时,服务器会对您输入的内容进行哈希,然后将结果与存储的哈希进行比较。如果二者匹配,您就通过了身份验证。明文密码从不会被存储。
问题:彩虹表
由于哈希是确定性的,'password' 的摘要对每个用户都相同。攻击者会预先计算巨大的“摘要到明文”查找表,这些表称为彩虹表。
如果两个用户使用相同的密码,他们存储的哈希值也会完全相同,从而泄露这一事实。单独使用 MD5 或 SHA-256 这类快速哈希不适合存储密码。
加盐
盐值是在哈希之前添加到每个密码中的唯一随机值。这意味着:
- 相同的密码会产生不同的哈希值。
- 预先计算的彩虹表会失去作用。
盐值会与哈希值一同存储,并不需要保密。它的作用是让每个哈希值都唯一,迫使攻击者分别破解每一个哈希值。
stored = salt + hash(salt + password)
# salt is random and unique per userbcrypt:专为密码而设计
bcrypt 专门用于存储密码。它有意设计得很慢,并包含可配置的成本因子(工作因子);随着硬件性能提升,您可以相应地提高其计算成本。
bcrypt 哈希值会将算法、成本和盐值嵌入同一个字符串中。运行缓慢是一项安全特性:它会限制攻击者猜测密码的速度。
$2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW
# $2b$ = bcrypt, 12 = cost factor, then salt + hash其他慢速哈希算法
除了 bcrypt 之外,现代密码哈希选项还包括:
- scrypt:具有内存硬度,可抵抗 GPU 和 ASIC 攻击。
- Argon2:密码哈希竞赛的获胜算法,可调节时间和内存成本,是现代推荐的选择。
- PBKDF2:对快速哈希执行数千甚至更多次迭代;可以接受,但弱于上述算法。
HMAC 与完整性
哈希也用于确保完整性,而不仅仅是处理密码。HMAC(基于哈希的消息认证码)将哈希与密钥结合,用于验证消息的完整性和真实性。
文件校验和(通常使用 SHA-256)可以让您确认下载内容是否遭到篡改。作为黑客,校验和不匹配可能意味着文件已被修改,或其中包含恶意内容。
现实中的哈希
作为黑客,您会不断遇到哈希:
- Linux 中的 /etc/shadow 存储带盐密码哈希,通常带有类似
$6$(SHA-512)或$2b$(bcrypt)的前缀。 - Windows 将 NTLM 哈希存储在 SAM 数据库中。
- Web 应用会将哈希密码存储在用户表中。
识别前缀后,您可以立即判断所用算法,并确定破解策略。
$6$rounds=5000$salt$hash # SHA-512 crypt
$2b$12$saltandhash... # bcrypt快速检查
请选择存储用户密码时最安全的方案。
回顾
现在您已经理解了哈希:
- 哈希是一种单向、固定大小且确定性的转换方式,与编码和加密不同。
- MD5 和 SHA-1 已被攻破;对于一般的完整性校验,请使用 SHA-256。
- 对于密码,请使用缓慢且带盐的算法:bcrypt、scrypt 或 Argon2。
- 盐值可以抵御彩虹表;HMAC 可以提供基于密钥的完整性保护。
接下来,您将学习使用 AES 和 RSA 进行对称加密与非对称加密。
用 AI 导师学习 Ethical Hacking Academy — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 31
- 课程
- 111
常见问题解答
「哈希」课时是免费的吗?
是的 — 「哈希」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ethical Hacking Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ethical Hacking Academy 课程共包含 4 节课。
「哈希」这节课中我会学到什么?
MD5、SHA、bcrypt 你通过在浏览器中直接运行的动手代码来练习 Ethical Hacking Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ethical Hacking Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ethical Hacking Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「哈希」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ethical Hacking Academy 课中编写并运行代码吗?
能。每节 Ethical Hacking Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。