← 返回博客首页

文本哈希工具怎么选:MD5、SHA 系列与 BCrypt 的边界

哈希到底是什么?

哈希(Hash)是把任意长度的输入通过单向函数映射成固定长度输出(摘要)的过程。好的密码学哈希具备:确定性(同输入同输出)、雪崩效应(改 1 个比特输出大变)、抗碰撞(难找到两个不同输入同输出)、单向性(难从输出反推输入)。

但「单向」不等于「不可破解」——对短密码或常见字符串,攻击者可用彩虹表/暴力穷举反查。所以哈希的用途必须选对。

四大用途,四种选法

用途 推荐 原因
文件完整性校验 MD5 / SHA-256 快、可复现,目的是检测传输损坏而非防攻击
数据指纹 / 去重 SHA-256 碰撞概率极低,输出稳定
防篡改签名 SHA-256 / SHA-512 配合密钥(HMAC)验证内容未被改
密码存储 BCrypt / Argon2 慢哈希 + 盐,专为抵抗暴力破解设计

MD5 / SHA-1:已不安全但仍有用武之地

MD5(128 位)和 SHA-1(160 位)已被证明存在实际碰撞攻击,绝不能用于安全标识、数字签名、证书。但在「文件去重」「缓存键」「非安全校验和」这类不防敌手的场景,它们依然快且可用。

经验法则:如果攻击者有可能精心构造输入来骗你,就别用 MD5/SHA-1。否则(如本地文件比对)可以用。

SHA-2 家族:当前默认安全选择

SHA-256 / SHA-384 / SHA-512 同属 SHA-2,目前无已知实用碰撞攻击,是绝大多数安全场景的默认选择:

  • SHA-256:输出 256 位,最通用,区块链、证书、Git 提交、文件签名都用它。
  • SHA-512:输出 512 位,在 64 位 CPU 上更快,抗长度扩展攻击表现更好。

为什么密码不能用 SHA?

SHA 的设计目标是——这是它的优点,却是密码存储的致命缺点。攻击者用一张 GPU 每秒可算数十亿次 SHA,弱密码瞬间被破。

密码存储需要慢哈希(slow hash)+ 盐(salt)

  • BCrypt:自适应成本因子,可随硬件变强而调慢;自动加盐。
  • Argon2:2015 年密码哈希竞赛冠军,内存硬(抵抗 GPU/ASIC)。
  • SCrypt:内存硬,同样抗硬件加速。

本站 hash-text通用单向哈希工具,适合校验/指纹/签名验真;密码存储请用专门的 BcryptHash 类方案,不要在这里「哈希一下密码就存库」。

哈希 ≠ 加密

  • 加密(AES 等):可逆,有密钥能还原明文 → 用于保护机密。
  • 哈希(SHA/MD5/BCrypt):单向,不可还原 → 用于验证完整性 / 生成指纹。

需要把数据还原出来?用加密,不是哈希。

最佳实践

  1. 校验/指纹用 SHA-256,别为"更快"退回 MD5 做安全用途。
  2. 防篡改用 HMAC-SHA256,把密钥一起参与哈希。
  3. 密码存储用 BCrypt/Argon2,绝不用裸 SHA。
  4. 别把哈希当加密:需要还原就上 AES。
  5. 可复现场景不加随机盐(如文件校验),密码场景必须加盐。

常见问题

MD5 还能用吗?

用于「完整性校验 / 非安全场景」(如文件去重、缓存键)仍可用,因为它快且无碰撞攻击风险影响这些用途。但任何涉及「防篡改 / 防伪 / 安全标识」的场景都不要用 MD5/SHA-1,改用 SHA-256。

SHA-256 和 SHA-512 怎么选?

两者都安全。SHA-256 输出 256 位,在 32 位/移动端和高并发校验中更省;SHA-512 输出 512 位,64 位平台上更快且抗长度扩展攻击略好。普通场景选 SHA-256 即可。

为什么密码不能用 SHA 存储?

SHA 系列设计目标是「快」,攻击者可用 GPU 每秒算数十亿次。密码存储需要「慢哈希」+ 盐(salt),如 BCrypt/Argon2/SCrypt,故意拖慢单次计算以抵抗暴力破解。本站 hash-text 工具是通用哈希,不是密码存储方案。

哈希和加密是一回事吗?

不是。加密可逆(有密钥可还原明文),哈希单向(理论上不可还原)。哈希用于「验证完整性 / 生成指纹」,加密用于「保护机密」。需要还原数据请用 AES(本站 AES 加密工具)。

加盐(salt)是什么?

salt 是在哈希前拼接到原文的随机值,使相同明文产生不同哈希,阻止彩虹表批量反查。通用哈希工具通常不自动加盐(因为要可复现),密码存储的 salt 由 BCrypt 等专业方案自动处理。

← 返回博客首页