哈希计算器 在浏览器本地计算 MD5、SHA-1、SHA-256、SHA-512 等常见哈希值,不上传文件。支持文本和大文件(流式处理)。
什么是哈希(Hash):一种把任意长度数据映射到固定长度输出的函数。好的哈希算法满足三条——
常见算法对比:
| 算法 | 输出长度 | 速度 | 安全状态 | 典型用途 |
|---|---|---|---|---|
| MD5 | 128 位 (32 hex) | 最快 | 已破(2004) | 文件校验、缓存 key |
| SHA-1 | 160 位 (40 hex) | 较快 | 已破(2017) | Git 对象 ID(非安全) |
| SHA-256 | 256 位 (64 hex) | 中等 | 安全 | TLS 证书、区块链、签名 |
| SHA-512 | 512 位 (128 hex) | 64 位 CPU 上快 | 安全 | 大数据、高安全 |
| CRC32 | 32 位 | 极快 | 非加密 | 网络/文件纠错 |
关键概念:
选型速查:文件校验/缓存 key → MD5 或 CRC32;代码仓库对象 → SHA-1(已够);证书/签名/区块链 → SHA-256;存用户密码 → bcrypt / argon2,永远别用 MD5/SHA 直接存密码。
非安全场景可以,安全场景不可以。MD5 在 2004 年就被证明能在秒级别构造碰撞(两个不同文件输出同 hash),CA 证书、密码存储、签名都已弃用。但校验文件下载完整性、生成缓存 key、做幂等标识这些非对抗性用途仍广泛使用——因为它快(比 SHA-256 快 3-5 倍)、输出短(32 位 hex)。
按安全需求和性能权衡——SHA-1(160 位)2017 年被 Google 首次实战碰撞,证书领域已弃用;SHA-256(256 位)是目前最通用的安全 hash,TLS 证书、区块链、软件签名首选;SHA-512(512 位)在 64 位 CPU 上实际比 SHA-256 快,但输出更长,适合大量高安全场景。日常开发 SHA-256 几乎是默认答案。
大概率是以下原因之一——换行符:Windows 下下载的文本文件被自动转成 CRLF(`\r\n`),而官网校验用的是 LF(`\n`);BOM:保存 UTF-8 文件时加了 BOM 头(3 字节),hash 当然变;下载不完整:网络中断,实际少了几字节;编码:中文文件保存时 GBK 还是 UTF-8 影响全部字节。校验时用"二进制"模式读取原始字节,别经过任何转换。
理论上不能——hash 是单向函数,从任意长度数据生成固定长度输出,信息有损。但实践中有彩虹表攻击:对常见密码(123456、password 等)预计算 hash 并建表,一查即中。这就是密码存储必须加 salt(每用户独立随机串) + 用慢 hash(bcrypt / argon2)的原因,而不是 MD5/SHA 直接算。
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 是确定性函数——相同输入永远得到相同输出。如果你两次算 MD5 出不同值,一定是输入变了(文件编辑器悄悄改了换行符、系统的时间戳注入、CDN 改了一个字节等)。想验证可以用命令行 `md5sum file` 或 `shasum -a 256 file` 跨工具对照。