文件哈希校验工具
选一个文件(最大 20 MB),立刻得到它的 MD5、SHA-1 与 SHA-256 三个摘要,和官网或同事给出的值逐位比对,即可判断文件是否完整、有没有被替换过。也可以切换成「计算文本」直接粘贴内容。文件由浏览器本地读取,不会上传到任何服务器。
下载安装包、镜像或同事传来的压缩包后,第一件事是核对哈希:与官网或对方给出的值逐位一致,才能确认文件完整、没被替换。本工具在浏览器本地读文件(最大 20 MB),一次给出 MD5、SHA-1、SHA-256 三个摘要,兼容发布方只提供其中某一种的情况。
选哪个值比对有讲究:判断下载有没有损坏三个都行;判断有没有被人替换必须用 SHA-256——MD5 与 SHA-1 都已被证明可人工构造碰撞。文件超过 20 MB 或要批量校验时,改用系统命令更快:sha256sum(Linux/macOS)或 certutil(Windows),流式读取不受内存限制。
这个工具解决你的问题了吗?
提交后会把工具名、你的输入与当前结果发送到服务器;请勿填写身份证号、手机号等隐私信息。
AI 助手 会结合你当前的输入与结果回答
追问会再次把当前输入与结果发送到服务器;请勿填写隐私信息。
使用步骤
- 把计算对象切到文件,选择本地文件,三个摘要自动出现。
- 与官网公布的值比对:先确认算法对得上(别拿 SHA-1 比 MD5)。
- 对不上时排查:是否下载完整、版本是否一致、压缩包与解压后文件是两个哈希。
- 大文件改用命令行(见下方示例),不必上传也不受 20 MB 限制。
计算原理与示例
基本用法
把「计算对象」切到文件,选择本地文件后结果自动出现:主结果是 MD5(32 位小写),下面两行是 SHA-1 与 SHA-256。切换成「计算文本」粘贴内容时,同样会按 UTF-8 编码计算三个摘要,方便和服务端日志里的值核对。
三个摘要该怎么选
判断「下载有没有损坏」用哪个都可以;判断「文件有没有被人替换」必须用 SHA-256——MD5 与 SHA-1 都已被证明可以人工构造出摘要相同的另一份文件,只有 SHA-256 目前没有实用碰撞。三个值一起给出,是为了兼容对方只提供其中某一种的情形。
大文件为什么建议改用命令行
浏览器里算摘要受单线程限制,20 MB 以上会明显卡顿(尤其三个算法一起算),所以本工具设了 20 MB 上限。超过这个量级建议用系统自带命令:Linux/macOS 用 sha256sum,Windows 用 certutil -hashfile,速度快而且不受内存限制。
口径:MD5 按 RFC 1321、SHA-1 按 RFC 3174、SHA-256 按 FIPS 180-4 实现,全部为纯 JS 同步实现,输入按字节(文件原始字节,或文本的 UTF-8 字节)参与计算;单次上限 20 MB,超出即提示改用命令行,不做分片增量计算。
代码示例
Shell 三个平台的命令
# Linux
sha256sum file.zip
md5sum file.zip
# macOS
shasum -a 256 file.zip
# Windows(cmd)
certutil -hashfile file.zip SHA256
certutil -hashfile file.zip MD5
PowerShell Windows PowerShell
# 一条命令出哈希,结果为大写十六进制
Get-FileHash file.zip -Algorithm SHA256
Get-FileHash file.zip -Algorithm MD5
# 批量校验目录下全部文件
Get-ChildItem *.zip | Get-FileHash -Algorithm SHA256
常见问题
这里的 MD5 和「MD5 加密工具」算出来的值一样吗?
一样,都是同一份实现,同一个内容得到同一个摘要。区别只在使用方式:本工具一次给出三个算法,还能直接读取文件;MD5 工具侧重展示大写形式与 16 位短码。
为什么我的文件和官网上给出的哈希值对不上?
按概率从高到低排查:文件是否下载完整(换镜像或重新下载)、是否比对的是同一个版本、是否误把 SHA-1 的值和 MD5 的比、复制时有没有漏首尾字符、下载工具是否做过自动修改(某些管理器会改动文件尾部)。压缩包的话要确认官网给的是压缩包的哈希,而不是解压后文件的。
哈希一样就能说明文件安全吗?
能说明「你拿到的内容与发布者给出的内容一致」,前提是这个哈希值本身来自可信渠道(官网 HTTPS 页面、官方公告)。如果哈希值是别人转发给你的,或者发布者的站点被攻破,比对通过也不代表内容无害——它管完整性,不管来源可信度。
大文件为什么建议用命令行而不是网页?
浏览器里算摘要要先把整个文件读入内存,再在主线程上一次算完,20 MB 以上就会出现明显卡顿甚至页面无响应。系统自带的 sha256sum(Linux/macOS)或 certutil -hashfile(Windows)是流式读取、几乎不占内存,几 GB 的文件也能秒出结果。
选中的文件会不会被上传到服务器?
不会。文件由浏览器的 FileReader 在本地读出字节直接参与计算,没有任何网络请求,服务器也拿不到文件内容。想验证的话可以在选文件后打开开发者工具的网络面板,不会出现上传请求。
为什么压缩包和里面文件的哈希不一样?
压缩包是一个容器:除了文件内容,还包含文件名、目录结构、压缩元数据与校验信息,任何一项变化都会改变整个包的摘要。所以官网给出的通常是「压缩包的哈希」,解压后再算自然对不上。
同一个内容算两次结果会变吗?
不会。哈希是纯函数,相同字节永远得到相同摘要,换浏览器、换系统都一样。唯一会让结果变化的是内容本身:多一个空格、换行符从 LF 变成 CRLF、编码从 UTF-8 变成 GBK,摘要都会完全不同。
文本模式下的字节数是怎么算的?
按 UTF-8 编码计算:一个英文半角字符 1 字节,一个汉字通常 3 字节,一个 emoji 4 字节。这个字节数同时也是参与摘要运算的数据长度,把它和摘要一起核对,可以快速判断是不是「算的对象就不一样」。
延伸阅读
来自本站原创文章,讲清这个工具背后的算法与口径。