TontonTools
安全与隐私

MD5、SHA-256 与 bcrypt:您应该使用哪种哈希?

Enyong Carinton Tegum· May 11, 2026· 1 分钟阅读时间
Abstract visual of data encryption and cryptographic hashing
Photo by Rafael Minguet Delgado on Pexels

散列接受任何输入并产生固定长度的“指纹”,而该“指纹”实际上是不可能逆转的。它无处不在——文件完整性检查、数字签名、区块链和密码存储。但 MD5、SHA-256 和 bcrypt 是为非常不同的工作而构建的,使用错误的(尤其是密码)是一种严重的、常见的安全错误。下面介绍如何正确选择。

首先,一个好的哈希函数能保证什么

加密哈希应该是确定性的(相同的输入,相同的输出),快速计算以供合法使用,并且能够抵抗两种攻击:从哈希中查找原始输入(原像抵抗),并找到具有相同哈希的两个输入(碰撞抵抗)。当哈希函数“崩溃”时,通常意味着研究人员找到了一种创建冲突的实用方法。

MD5:仅限快速指纹

MD5 生成 32 字符(128 位)散列并且速度非常快。问题是:自 2000 年代中期以来,它的密码学已被破解 - 实际的冲突攻击已有详细记录,这就是为什么它绝不能用于密码、证书或签名。对于非安全目的(例如缓存密钥、重复数据删除和快速校验和)来说,它仍然没问题,因为攻击者没有动机伪造匹配。使用我们的 MD5 生成器生成一个。

SHA-256:安全完整性

SHA-256 是由 NIST 标准化的 SHA-2 系列的一部分,生成 256 位哈希值,并且在没有实际攻击的情况下保持防碰撞。它是 TLS 证书、软件签名和比特币背后的主力。每当您需要验证数据是否未更改时,请使用它 - 文件下载、文档完整性、API 请求签名。尝试使用 SHA-256 生成器来查看它的实际效果。

bcrypt:密码

以下是困扰许多开发人员的关键见解:密码永远不应该使用 MD5 或 SHA-256 进行哈希处理,正是因为它们速度很快。速度对于校验和来说非常快,但对于密码来说却是灾难性的,因为它让攻击者每秒可以针对被盗数据库进行数十亿次猜测。 bcrypt故意变慢并且包含内置的随机盐,因此相同的密码会产生不同的哈希值,并且暴力破解变得不切实际。它的“成本因素”让您可以随着硬件变得更快而增加工作量。查看它与我们的 bcrypt 哈希生成器 的配合。正是出于这个原因,OWASP 密码存储备忘单推荐 bcrypt(或 Argon2/scrypt)。

快速参考

  • MD5 → 非安全指纹、缓存密钥、重复数据删除。绝不是为了安全。
  • SHA-256 → 文件完整性、签名、证书、区块链。
  • bcrypt(或 Argon2/scrypt)→ 密码存储,总是加盐且缓慢。

识别未知哈希

继承了一个充满神秘哈希值的数据库?长度和格式是重要线索 - 32 个十六进制字符通常表示 MD5,64 表示 SHA-256,以 $2y$ 开头的字符串是 bcrypt。我们的哈希标识符可以为您缩小范围。有关更深入的“为什么快速哈希对密码失败”的故事,请参阅我们关于创建强密码的配套指南。

底线

将工具与工作相匹配:MD5 用于简单指纹,SHA-256 用于完整性,以及慢速加盐算法(例如用于密码的 bcrypt)。选择错误并不是一种风格偏好,而是数据库泄露得到控制和造成灾难性后果的区别。

Share X / Twitter Facebook LinkedIn WhatsApp

继续阅读

← 返回所有帖子

We use cookies for analytics and to keep the tools free via ads. See our Privacy Policy.