知办 · 开发工具

文件哈希校验器

选择本地文件,在浏览器里计算 SHA-256 / SHA-1 / MD5,并与官方公布的校验值比对。文件不上传,断网也能用。

把文件拖到这里,或者

算法:

MD5 已被证明可在实际时间内构造碰撞,不得用于安全校验,仅用于兼容仍在发布 MD5 的历史校验清单。

尚未选择文件。

未提供期望哈希,因此不进行比对(NOT CHECKED)。

工具说明

本工具在浏览器本地读取你选择的文件,用 SHA-256 / SHA-1 / MD5 计算校验值,并可与软件发布方公布的校验值逐字符比对,直接给出 MATCH 或 MISMATCH 的结论。

整个过程不涉及任何网络请求:页面源码里没有 fetch、XMLHttpRequest、WebSocket、sendBeacon 之类的调用,也没有表单提交目标,不引用任何外部脚本、样式或字体。全部逻辑都在这一个 HTML 文件里。

使用场景

使用方法

  1. 把文件拖入虚线框,或点击「选择文件」。
  2. 勾选需要计算的算法,默认只算 SHA-256,通常也只需要 SHA-256。
  3. 点击「计算哈希」。大文件会显示进度,并实时给出已处理的字节数。
  4. 把官方公布的校验值粘贴到「期望哈希」输入框,长度会自动识别算法,并立刻给出 MATCH / MISMATCH。
  5. 点「复制结果」,可把文件名、大小和各算法的校验值一起复制走。

大文件是怎么处理的

工具按分片读取文件(可选 1 / 4 / 16 MiB),内存占用只与分片大小有关,与文件本身大小无关,不会把整个文件读进内存。计算耗时取决于浏览器实现和你文件所在磁盘的速度。若文件达到数 GB,建议改用本工具所属开源仓库里附带的 Node 命令行版本,同样是流式读取。

关于「文件不上传」

这不是一句承诺,而是可以自己验证的技术事实:

  • 页面源码中没有任何网络请求代码,也没有表单提交目标。你可以在浏览器里查看网页源代码,直接搜索这些关键字。
  • 打开开发者工具,切到 Network 面板,清空记录,然后选择文件并点击「计算哈希」——面板里不会出现任何新的请求。
  • 断网(或让浏览器进入离线模式)后打开本页,依然可以正常算出结果。
  • 页面不引用任何外部脚本、样式或字体,全部逻辑都在这一个文件里。

本工具不做的事:不读取所选文件以外的本地数据;不使用 localStorage / IndexedDB;不记录、不上传、不在本地留下任何副本。

结果的可靠性边界

常见问题

计算时会偷偷上传我的文件吗?

不会。本页源码里没有任何网络请求代码(没有 fetch、XMLHttpRequest、WebSocket、sendBeacon,也没有表单提交目标),也不引用外部脚本或样式。断网后打开本页仍然可以正常计算;在开发者工具的 Network 面板里清空记录后选择文件并计算,面板中不会出现新的请求。这几点都可以自己验证。

支持多大的文件?

采用分片读取,默认每片 4 MiB,内存占用与文件大小无关,几十 GB 的文件也不会把内存撑爆。实际速度取决于设备与文件大小,页面会显示实时进度与总耗时,可据此自行判断;数 GB 的文件建议使用仓库附带的 Node 命令行工具,流式读取吞吐更高。

为什么还保留 MD5?应该用哪个算法?

优先使用 SHA-256。MD5 已被证明可在实际时间内构造碰撞,因此不得用于判断文件是否被恶意替换等安全用途。保留它的唯一原因是:部分软件至今仍只公布 MD5 校验值,为了能与这类历史清单兼容。

结果和 certutil、sha256sum 不一致怎么办?

先确认比较的是同一种算法——32 位十六进制是 MD5,40 位是 SHA-1,64 位是 SHA-256。若算法一致仍不同,通常意味着文件在下载或传输中被改动、下载不完整,或者你手上的校验值对应的并不是同一个版本。也可以勾选「独立实现交叉校验」,用浏览器原生 WebCrypto 再算一次,从而排除本页实现本身的问题。

为什么「期望哈希」显示 NOT CHECKED?

有三种可能:一是期望值为空,所以没有比对;二是期望值长度不是 32、40 或 64 位十六进制,无法识别算法,此时会显示 INVALID;三是期望值对应的算法本次没有勾选,改勾上再计算即可。

能一次校验多个文件吗?

当前版本一次处理一个文件,对应「一个下载包对一个官方校验值」这个最常见场景。批量校验已在计划中,尚未实现。