Ethical Hacking Academy · 课时

哈希

MD5、SHA、bcrypt

第 2 / 4 课13 个步骤

哈希 是 CoddyKit 上的免费 Ethical Hacking Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ethical Hacking Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ethical Hacking Academy 课程共包含 4 节课。

什么是哈希

哈希函数接受任意大小的输入,并生成固定大小的输出,称为摘要。相同的输入始终会生成相同的摘要。

关键在于,哈希是一种单向操作。您无法通过数学方法将摘要逆向还原为原始输入。这正是哈希区别于编码和加密的地方。

良好哈希的属性

密码哈希函数应具备以下特性:

  • 确定性:相同输入产生相同输出。
  • 计算速度快(对于通用哈希而言),但密码哈希最好应当较慢。
  • 抗原像攻击:给定摘要后,无法找到对应的输入。
  • 抗碰撞:难以找到具有相同摘要的两个输入。
  • 雪崩效应:一个比特发生变化时,约一半的输出比特会翻转。

MD5

MD5 会生成 128 位(32 个十六进制字符)的摘要。它速度快,历史上也很常见,但在密码学上已经被攻破:现实中存在可行的碰撞攻击。

绝不要将 MD5 用于安全用途。您仍会在文件校验和旧系统中遇到它,因此它在安全评估期间经常成为攻击目标。

echo -n 'password' | md5sum
# 5f4dcc3b5aa765d61d8327deb882cf99

SHA 家族

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 user

bcrypt:专为密码而设计

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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 编码与加密
  2. 哈希
  3. 对称与非对称加密
  4. 破解哈希
← 返回 Ethical Hacking Academy