piapia123
zh

文件哈希校验

编码

所有处理都在浏览器本地完成,数据不上传服务器

把文件拖到这里,或点击选择

单个文件 · 全程在本机处理

文件只在你的浏览器里读取,不会上传到任何服务器。断网也能正常用。

算一个文件的哈希 —— 拖进来就行,文件不会被上传,所有计算都在你的浏览器里完成。 最常见的用途是校验下载:官网或镜像站给了 `sha256: 9f86d0…`,把它和你算出来的这个值一比,就知道文件在传输途中坏没坏、有没有被人动过手脚。开源项目的发布页、固件下载、Linux 发行版,现在基本都会附一个摘要。 ⚠️ 大文件是分块算的:超过 32 MB 就改用自带的增量实现,一次只读一块进内存,内存不随文件增大而线性增长,并实时显示进度(「已处理 1.2 GB / 4.0 GB」这种)。小文件仍走浏览器原生接口(更快)。用了哪条路会写在结果里 —— 不静默切换。仍然保留 512 MB 上限:纯 JS 的哈希比命令行慢得多,这个体积以上建议用 `sha256sum`(Windows:`certutil -hashfile 文件名 SHA256`)。 还有一句得提醒:MD5 和 SHA-1 早就不适合用来防篡改了,构造碰撞的成本已经低到普通机器就能承受。它们留在这里是因为大量老系统仍在用、许多老教程里给的也还是它们。真要验证文件有没有被动过,请用 SHA-256。 💡 比对不用自己动手:把发布页上那一行原样粘进「比对」框即可(大小写、`:` 分隔、`SHA256(file) = …` 这类前缀它都认),结果区最上面会直接给出「✓ 一致」或「✗ 不一致」,不一致时还会把两边的值并排列出来。

功能

  • 一次算出五种:MD5、SHA-1、SHA-256、SHA-512、CRC-32
  • ⚠️ 把发布页给的摘要直接粘进「比对」框,结果里直接给「✓ 一致 / ✗ 不一致」 —— 不用自己在两串 64 位十六进制之间逐字比对
  • 比对时各种写法都认:大写、`:` 或空格分隔、`SHA256(file) = …` 这类前缀都会自动剥掉,算法由长度推断,不用你选
  • 顺带列出文件名、体积、类型与修改时间
  • 每一行都有独立的复制按钮,不用手动选中长串
  • 空文件也算得出确定的摘要,而不是空输出
  • ⚠️ 超过 32 MB 自动分块计算:内存不随文件增大而线性增长,并显示进度(Web Crypto 没有增量接口,分块走自带的纯 JS 实现)
  • 结果里注明用的是「分块(省内存)」还是「一次性」,不静默切换
  • 超过 512 MB 时说明原因,并指出该换成哪个命令行工具
  • 文件不上传,断网也能正常用

使用方法

  1. 把文件拖进虚线框,或点击选择文件
  2. 结果立刻出来,五种摘要自上而下并列
  3. 有官方摘要的话,粘进「比对」框,最上面会直接给出结论
  4. 点任意一行右侧的复制按钮复制该值

常见问题

为什么我算出来的 SHA-256 和官网给的对不上?
先排查这三件事。一是文件没下完:下载中断时浏览器有时会留下一个看起来正常的残包,体积与完整版不同 —— 对比一下这里显示的大小。二是版本不同:同一个软件的不同版本、不同架构(x64 / arm64)、不同镜像的摘要本来就各不相同,确认你下的是发布页上那一个。三是真的被改过:如果大小和版本都对得上、摘要把把都对不上,那就该考虑文件在传输途中被替换过 —— 尤其是从非官方渠道下载的。
MD5 还能用吗?
分场景。防传输损坏勉强可以:下载过程中随机坏掉几个字节,MD5 大概率能发现,CRC-32 也够用。防人为篡改不行:MD5 与 SHA-1 的碰撞已经被实际构造出来了,攻击者可以让一个恶意文件和一个正常文件拥有相同的 MD5 —— 也就是说,摘要对上并不能证明文件没被换过。真要防篡改请用 SHA-256。另外存密码更不能用它:那是 bcrypt / scrypt / Argon2 的活。
大文件是怎么算的?为什么还有 512 MB 的上限?
超过 32 MB 的文件走分块路径:工具自带的增量 SHA / MD5 / CRC 实现一次只吃一块数据,内存不随文件增大而线性增长,并实时显示进度;每块之间会让出主线程一帧,界面因此不会冻住。小文件仍然交给浏览器的原生 `crypto.subtle`,更快。之所以还设 512 MB 上限:纯 JS 的哈希比原生命令行慢得多,这个体积以上用 `sha256sum` 或 `certutil -hashfile` 更合适。⚠️ 顺带说明:本工具一次只处理一个文件,没有「两个文件逐字节比对」这个功能 —— 外壳的契约就是一次一个文件。要核对某个文件,把官方摘要粘进「比对」框即可。

相关工具