⭐ 觉得好用?收藏备用,下次直接打开
0 字符
🔍 哈希验证 粘贴已知哈希,自动比对当前计算结果

哈希计算器 在浏览器本地计算 MD5SHA-1SHA-256、SHA-384、SHA-512 与 HMAC,不上传文本或文件。适合做完整性比对、摘要生成和基础验签调试,不等于“加密”。

什么是哈希

一种把任意长度数据映射到固定长度输出的函数。好的哈希算法满足三条:

  1. 确定性 — 同输入永远同输出
  2. 均匀性 — 不同输入极少碰撞
  3. 单向性 — 从输出反推输入通常计算不可行

常见算法对比

算法输出长度速度安全状态典型用途
MD5128 位 (32 hex)最快不适合安全用途非对抗性完整性比对、缓存 key
SHA-1160 位 (40 hex)较快不适合新的安全设计旧系统兼容、历史对象标识
SHA-256256 位 (64 hex)中等当前通用默认值下载校验、签名摘要、通用安全哈希
SHA-512512 位 (128 hex)中等到较快当前可用更长摘要、部分 64 位环境

关键概念

  • 碰撞(Collision):不同输入得到同一摘要。数学上必然存在,安全哈希要求“构造碰撞在计算上不可行”
  • 加盐(Salt):存用户密码时给每人加一个随机串再 hash,让彩虹表失效
  • 慢哈希:bcrypt、argon2、scrypt 专为密码存储设计,故意慢、对 GPU 并行不友好
  • HMAC:在哈希外再加入共享密钥,用来验证“消息来自知道这个密钥的一方”,适合 Webhook 和 API 签名

选型速查

  • 下载校验 / 通用摘要 → SHA-256
  • 非对抗性缓存 key / 去重 → MD5 或 SHA-256
  • 旧系统兼容 → 只在对方明确要求时用 SHA-1
  • Webhook / API 消息签名 → HMAC-SHA256 或对方协议要求的 HMAC
  • 存用户密码 → bcrypt / argon2,永远别用 MD5 / SHA 直接存密码

📍使用场景

  • 文件完整性校验下载大文件后生成 hash,和官网发布的 checksum 比对是否被篡改或损坏。
  • 快速去重 / 短 ID对内容取 hash 做缓存 key 或幂等键,避免相同内容反复处理。
  • 比对两段文本差异对两份文本分别 hash,相等就说明一字不差;不等再做 diff。

常见问题

MD5 还能用吗?

非安全场景通常还可以,安全场景不要用。MD5 已经不适合证书、数字签名、密码存储这类抗攻击用途;但在下载后做非对抗性完整性比对、生成缓存 key、做去重指纹时仍常见。只要场景里存在“有人故意构造碰撞”的可能,就不要把 MD5 当安全校验。

SHA-1、SHA-256、SHA-512 怎么选?

按用途选。SHA-256 是最通用的默认值;SHA-512 常见于 64 位平台或需要更长摘要的场景;SHA-1 已不适合新的安全校验或签名设计。对大多数工程问题,如果你没有很强的兼容性约束,直接选 SHA-256 通常最稳。

同一个文件我算出的 hash 和官网不一样?

大概率是以下原因之一——换行符:Windows 下下载的文本文件被自动转成 CRLF(\r\n),而官网校验用的是 LF(\n);BOM:保存 UTF-8 文件时加了 BOM 头(3 字节),hash 当然变;下载不完整:网络中断,实际少了几字节;编码:中文文件保存时 GBK 还是 UTF-8 影响全部字节。校验时用"二进制"模式读取原始字节,别经过任何转换。

hash 能还原原文吗?

理论上不能——hash 是单向函数,从任意长度数据生成固定长度输出,信息有损。但实践中有彩虹表攻击:对常见密码(123456、password 等)预计算 hash 并建表,一查即中。这就是密码存储必须加 salt(每用户独立随机串) + 用慢 hash(bcrypt / argon2)的原因,而不是 MD5/SHA 直接算。

为什么 Git 用 SHA-1 还不换?

Git 历史上主要把 SHA-1 用作对象标识而不是通用安全签名。今天的 Git 生态也已经在推进 SHA-256 支持,但默认兼容模式仍大量存在。更稳妥的理解是:不要因为 Git 还在用 SHA-1,就把 SHA-1 当作新系统的安全默认值

对一个文件重复算同一个 hash,每次结果会变吗?

不会。hash 是确定性函数——相同输入永远得到相同输出。如果你两次算 MD5 出不同值,一定是输入变了(文件编辑器悄悄改了换行符、系统的时间戳注入、CDN 改了一个字节等)。想验证可以用命令行 md5sum fileshasum -a 256 file 跨工具对照。