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

哈希计算器 在浏览器本地计算 MD5SHA-1SHA-256、SHA-512 等常见哈希值,不上传文件。支持文本和大文件(流式处理)。

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

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

常见算法对比

算法输出长度速度安全状态典型用途
MD5128 位 (32 hex)最快已破(2004)文件校验、缓存 key
SHA-1160 位 (40 hex)较快已破(2017)Git 对象 ID(非安全)
SHA-256256 位 (64 hex)中等安全TLS 证书、区块链、签名
SHA-512512 位 (128 hex)64 位 CPU 上快安全大数据、高安全
CRC3232 位极快非加密网络/文件纠错

关键概念

  • 碰撞(Collision):不同输入出同一 hash。数学上必然存在,安全哈希要求”计算上不可行”
  • 加盐(Salt):存用户密码时给每人加一个随机串再 hash,让彩虹表失效
  • 慢哈希:bcrypt、argon2、scrypt 专为密码存储设计,故意慢、对 GPU 并行不友好

选型速查:文件校验/缓存 key → MD5 或 CRC32;代码仓库对象 → SHA-1(已够);证书/签名/区块链 → SHA-256;存用户密码 → bcrypt / argon2,永远别用 MD5/SHA 直接存密码

📍使用场景

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

常见问题

MD5 还能用吗?

非安全场景可以,安全场景不可以。MD5 在 2004 年就被证明能在秒级别构造碰撞(两个不同文件输出同 hash),CA 证书、密码存储、签名都已弃用。但校验文件下载完整性、生成缓存 key、做幂等标识这些非对抗性用途仍广泛使用——因为它快(比 SHA-256 快 3-5 倍)、输出短(32 位 hex)。

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

按安全需求和性能权衡——SHA-1(160 位)2017 年被 Google 首次实战碰撞,证书领域已弃用;SHA-256(256 位)是目前最通用的安全 hash,TLS 证书、区块链、软件签名首选;SHA-512(512 位)在 64 位 CPU 上实际比 SHA-256 快,但输出更长,适合大量高安全场景。日常开发 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 是对象寻址用(给每次 commit、每个文件生成唯一 ID),不是安全 hash 用途。即便有人构造碰撞把恶意文件塞进仓库,Git 也会拒绝合并。Git 2.29(2020 年)已支持 SHA-256 仓库,但为兼容性默认还是 SHA-1——GitHub/GitLab 都默认 SHA-1。新项目如追求未来安全性可初始化为 `git init --object-format=sha256`。

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

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