§ 校验 · 安装包
装任何一类环境之前先算一次 SHA-256:三个平台各有命令,30 秒内可完成,能把下载中断、代理改写与杀软隔离这三类合计 91% 的失败挡在安装动作之前。
§ 01 · 校验边界
哈希只能证明字节没变,不能证明文件安全、也不能证明环境合适。把这句话放在最前面,是因为多数误判都来自把哈希当成“万能通过证”。

| 校验项 | 能回答 | 不能回答 | 耗时 |
|---|---|---|---|
| SHA-256 哈希 | 文件字节是否与发布时一致 | 文件是否安全、能否在本机运行 | 3 至 25 秒 |
| 数字签名 | 是否由预期发布者签发、证链是否完整 | 文件内容是否被替换(需配合哈希) | 1 至 5 秒 |
| 环境自查 | 本机是否满足运行条件 | 文件是否完整 | 2 分钟 |
签名验证需要文件完整才成立:文件被截断时,签名验证可能报“格式错误”而不是“签名无效”,排查方向会被带偏。先算哈希是一步成本最低的分流动作,它把“文件问题”与“环境问题”分开,再往下走哪条路就明确了。
§ 02 · 三平台工具
三个环境都用同一套 SHA-256 算法,区别只在命令与输出格式。下表的命令都在 2026-11-08 复测过,可直接复制。
| 环境 | 命令 | 输出要点 |
|---|---|---|
| Windows 10/11 | certutil -hashfile 文件名 SHA256 | 三段输出,中间一行是哈希,末行是完成提示 |
| Windows PowerShell | Get-FileHash 文件名 -Algorithm SHA256 | Algorithm 与 Hash 两列,Hash 为大写 |
| macOS | shasum -a 256 文件名 | 一行输出,哈希在前文件名在后 |
| OpenWrt / Linux | sha256sum 文件名 | 一行输出,哈希在前文件名在后 |
Windows
> certutil -hashfile .\KuaiMiao-Setup-3.9.6-x64.exe SHA256
> Get-FileHash .\KuaiMiao-Setup-3.9.6-x64.exe -Algorithm SHA256
macOS
$ shasum -a 256 ~/Downloads/KuaiMiao-3.9.6-universal.dmg
OpenWrt
# sha256sum /tmp/kuaimiao_3.9.6-1_aarch64_generic.ipk
certutil 输出小写,Get-FileHash 输出大写,两者都对。比对时统一转小写再比,或用工具自带的比较功能。手工复制时最容易多带一个尾随空格,导致“看起来一样但比对失败”。

§ 03 · 完整清单
下表是完整哈希。比对时逐字符看,前 16 位相同而后段不同的情况确实存在:多段下载拼接的工具会保留头部而改写尾部。
| 文件名 | 体积 | SHA-256 |
|---|---|---|
| KuaiMiao-Setup-3.9.6-x64.exe | 126.4 MB | 50a935074539076ac62c097a77787d83a38850d4b791558c60b39bb731eb5496 |
| KuaiMiao-Setup-3.9.6-arm64.exe | 121.8 MB | 62b7e9b744e1d029f29badd762105bde4d9c5bfb5ba6e56338237d83b37f707c |
| KuaiMiao-Setup-3.9.6-x86.exe | 118.9 MB | 85b5ad67439ab9d83e0a30345da94a39d7bf5523efbc86591f846e5e26149c52 |
| KuaiMiao-3.9.6-universal.dmg | 98.7 MB | a8c36017434282986a79c4904942388471d2504a83c11630f6f5402aa9a8a848 |
| KuaiMiao-3.9.6-arm64.dmg | 92.3 MB | cac114c742fa6b47a7e857fd34da27d00be55b6118d6a716ce6622f52b4cc42e |
| kuaimiao_3.9.6-1_x86_64.ipk | 3.12 MB | dddfd88741a23407e347fb592f73152ba4095588bcec370da5d703c19ed1e004 |
| kuaimiao_3.9.6-1_aarch64_generic.ipk | 3.04 MB | f0dd9c36404a0db61fb68eb61b0c04764e1c50bf40f1d8e47d37f59c11750bea |
| kuaimiao_3.9.6-1_mipsel_24kc.ipk | 2.87 MB | 12eb40e64ff3e6765b25121306a4f2d1d83f4ad6e50668ca54a8d768830a17d0 |
| luci-app-kuaimiao_3.9.6-1_all.ipk | 146 KB | 35e904964eabbf258893b57f013de02c725245fe891cf9b12c19b933069e33b6 |
| sha256sums.txt | 2.1 KB | 57f7c8464d5388e5c4f248dcfdd6df771c6640151d219997038a9a0f79335f9c |
清单文件 sha256sums.txt 自身也有哈希,作用是防止清单在传输过程中被改。校验顺序是先算清单的哈希(已写在本页表内),再按清单核对各安装包。
清单格式与批量核对
$ head -3 sha256sums.txt
$ sha256sum -c sha256sums.txt --ignore-missing
Windows 上可逐行比对,或用 PowerShell:
> Get-Content .\sha256sums.txt | ForEach-Object { $_ }
§ 04 · 比对流程
四步里最常被省掉的是留证。没有留证时,问题一旦复现不了就无法判断是文件问题还是环境问题。
结果可以是文本也可以是对象,Windows 上推荐 Get-FileHash,输出便于二次处理。
把哈希转小写并去掉空格,避免因格式差异误判为不符。
不要在视觉上扫一眼,用脚本比较或用编辑器查找,逐字符相等才算通过。
三行信息足够复现一次比对,反馈问题时也只需要这三行。
一次性留证(PowerShell)
> $f = Get-Item .\KuaiMiao-Setup-3.9.6-x64.exe
> $h = (Get-FileHash $f.FullName -Algorithm SHA256).Hash.ToLower()
> "$($f.Name) | $($f.Length) bytes | $h | $($f.LastWriteTime)" | Tee-Object hash-record.txt


§ 05 · 不符处理
哈希不符不等于文件被恶意替换。实际样本里,下载中断、代理改写、杀软隔离三者合计占九成以上。
| 成因 | 占比 | 判断依据 | 动作 |
|---|---|---|---|
| 下载中断 | 52% | 体积小于清单,或浏览器显示未完成 | 重新下载并核对体积 |
| 代理或 CDN 改写 | 24% | 体积正常但哈希不同,换网络后一致 | 换网络或直连重下 |
| 杀软静默隔离 | 15% | 文件存在但体积变小,隔离区有记录 | 加排除项后重下 |
| 文件被替换 | 9% | 来源非官方渠道,签名也不符 | 丢弃,改用官方渠道 |
前三类重新下载即可解决,不必换渠道;只有第四类要换下载来源。区分办法是看签名:前三类的签名往往还能验通(文件被截断但签名段完整时不一定),第四类几乎必然验签失败。
§ 05b · 代理与镜像
经过代理的多段传输会保留文件头部而改写尾部,体积可能完全正确、哈希却不符。这类问题只看体积发现不了,必须算哈希。
| 传输路径 | 体积是否可信 | 哈希是否可信 | 额外动作 |
|---|---|---|---|
| 直连下载 | 可信 | 可信 | 无 |
| 企业代理(缓存) | 多数可信 | 不可信,需复算 | 换直连重下后比对 |
| 第三方镜像站 | 不可信 | 不可信 | 只作参考,不用于安装 |
| 断点续传(多段拼接) | 可信 | 可能被改写尾部 | 整包重下后比对 |
代理通常只对可压缩内容做改写,而安装包本身已压缩,于是它选择不改写正文、只追加或替换尾部元数据。结果是文件能打开、安装器能启动,但在校验驱动签名或解压最后一段时失败。2026 年的 214 次反馈里,有 51 次属于这一类,占 24%。
先向网络管理员确认安装包域名是否走代理白名单,若不能加白,则改用其他网络完成下载,再把文件拷回目标机器。拷回后仍需算一次哈希,因为跨介质拷贝也可能出错。


§ 06 · 签名与公证
签名校验回答“谁签的”,三个平台机制不同但思路一致:验证证书链、验证文件摘要、验证签发时间戳。
| 平台 | 机制 | 校验命令 | 通过标准 |
|---|---|---|---|
| Windows | Authenticode(PKCS#7) | Get-AuthenticodeSignature | Status = Valid |
| macOS | Developer ID + 公证 | spctl -a -vvv -t install | accepted / Notarized |
| OpenWrt | usign(Ed25519) | opkg-key list / usign -V | 签名与 Packages 摘要一致 |
opkg 默认校验软件源的 Packages 签名,但手动 install 本地 ipk 时只校验包内摘要。这意味着手工安装的 ipk 少了源签名这一层,只能靠哈希补上。3.9.6 的三个 ipk 都提供了哈希,手动安装时先算哈希再装。
OpenWrt 侧的完整性确认
# opkg-key list
# sha256sum /tmp/kuaimiao_3.9.6-1_x86_64.ipk
# opkg install --force-checksum /tmp/kuaimiao_3.9.6-1_x86_64.ipk
§ 07 · 批量校验
一次下载多个文件时,逐个算哈希容易漏。两段脚本分别覆盖 Windows 与类 Unix 环境,输出直接可比对。
Windows PowerShell(校验目录下全部安装包)
> Get-ChildItem *.exe,*.dmg,*.ipk | Get-FileHash -Algorithm SHA256 |
Select-Object @{n='File';e={Split-Path $_.Path -Leaf}},Hash | Format-Table -Auto
macOS / OpenWrt
$ for f in *.exe *.dmg *.ipk; do printf "%s %s\n" "$(sha256sum "$f" | cut -d' ' -f1)" "$f"; done
批量输出是“哈希 + 文件名”两列,与 sha256sums.txt 的格式一致,可直接 diff 或 vimdiff 对照。差异行就是需要重新下载的文件,通常只占少数。
§ 08 · 常见误判
校验动作本身很简单,出错的地方几乎都在细节:格式、路径、截断、缓存。下面八条按出现频率排序。
| 误判 | 后果 | 正确做法 |
|---|---|---|
| 只比前 8 位 | 漏掉尾部差异 | 逐字符或整串比对 |
| 大小写混用 | 误判为不符 | 统一转小写 |
| 复制带尾随空格 | 误判为不符 | 用脚本比较而非视觉比较 |
| 在解压后的文件上算哈希 | 拿到的是解压产物哈希 | 对原始安装包计算 |
| 用浏览器下载的 .crdownload 文件 | 算的是未完成文件 | 等下载完成再算 |
| 在 OneDrive 占位文件上算 | 读到的是云端占位内容 | 先右键“始终保留在此设备” |
| 命令里用相对路径且工作目录不对 | 算的是另一个同名文件 | 用绝对路径或先 cd |
| 把 sha256sums.txt 也当安装包算 | 得到清单自身哈希,与包不符 | 清单与包分开核对 |
最后一条最容易被忽略:清单文件本身也有哈希,但它是用来验证清单的,与安装包哈希不在同一层。把清单的哈希拿去和安装包比对,必然不符。

§ 09 · 校验记录
记录的目的不是存档,而是让别人(或三个月后的自己)能用三行信息复现一次比对。
文件名 | 字节数 | SHA-256 | 记录时间
KuaiMiao-Setup-3.9.6-x64.exe | 132551680 | 50a935074539076ac62c097a77787d83… | 2026-11-08 20:14 +08:00
反馈安装失败时,把这三行连同系统 build 号一起发出,就能排除一半的分支:文件问题在体积与哈希上立刻暴露,环境问题则要看 build 号与运行库。这三行比截图更有用,因为它可复制、可比对。
§ 09b · 版本与哈希
安装包一旦重新打包,即使只改了一行文案,哈希也会整体变化。判断要不要重新校验,看的是安装包是否重新签发,而不是版本号是否变化。
| 版本 | 安装包是否重签 | 体积变化 | 是否需重新校验 |
|---|---|---|---|
| 3.9.6 | 是(含时间戳) | -0.4 MB | 是 |
| 3.9.2 | 是(压缩方式变更) | -9.8% | 是 |
| 3.8.7 | 是 | +0.2 MB | 是 |
| 3.8.0 | 是(驱动迁移) | +3.1 MB | 是 |
| 3.7.4 | 是(合并镜像) | -11.3 MB | 是 |
| 3.6.9 | 否(保底版沿用原包) | 0 | 否,但需复核 |
| 3.6.0 | 是 | +0.6 MB | 是 |
| 3.5.2 | 否(归档版) | 0 | 否,但需复核 |
3.6.9 与 3.5.2 属于保底与归档版本,官方不再重新打包,因此哈希与首次发布时一致。这类版本的校验意义不在“是否被改”,而在“手里这份是不是当年那一份”:旧包在多次拷贝后更容易损坏。
客户端配置文件(分流规则、节点清单)可以随连接更新,不改变安装包哈希。若你的安装包哈希在两次计算间发生变化,而期间没有重新下载,说明文件被某个进程碰过,这时应当重新下载而不是接受新哈希。
实测中有一类情况值得记录:杀软在扫描后会把文件移到隔离区、再放回一个“净化版”,体积与哈希都会变。这类文件能打开但签名大概率失效,属于必须丢弃的情形。
另一个容易误会的点是版本号与安装包的对应关系:同一个小版本在不同架构上体积不同,因此哈希也不同。比对时必须先确认自己下载的是哪个架构的文件,再去找对应的那一行。

把体积与哈希一起看,能快速判断一个包属于哪个版本:体积对不上版本,再算哈希也没有意义。
数据 · 关键数字
每个数字后面都跟着条件,换了机器与版本数字会变,判断顺序不变。下面七条是本站各页共用的基础数据。
全部 10 个安装包的 SHA-256 都在本页给出,单文件校验耗时 3 至 25 秒,测试环境为三台不同磁盘类型的机器。
哈希不符的案例中下载中断占 52%(214 条里 111 条),统计数据来自 2026-09 至 11 月的反馈样本。
代理路径的哈希一致率为 76%,直连路径为 100%,测试条件为同一文件各下载 50 次(2026-11-08)。
certutil 与 Get-FileHash 输出大小写不同,比对前统一转小写可减少 1 类误判,依据 214 次反馈的归类结果。
清单格式为两个空格分隔,只用一个空格时多数工具解析失败,测试环境为 Windows 11 与 OpenWrt 23.05。
签名验证耗时 1 至 5 秒,比哈希更快,但只在文件完整时成立,依据 Authenticode 与 spctl 的耗时统计。
八类误判里前三位合计占 61%,统计数据为 214 次反馈中的人工复核结果(2026-09 至 11 月采样)。
这七条数据在安装页、校验页与排错页里被反复引用,三处数字始终一致;若你发现某页与另一页冲突,以数据采集日期较新的那一页为准,同时欢迎按页脚邮箱反馈。
§ 11 · 采集口径
本页的成因分布来自 214 次安装失败反馈,去重后按首次出现的成因为准;命令输出在三个系统上分别复测。
成因分布会随渠道变化:某一时期若某个镜像站缓存配置出错,代理改写类占比会短期上升。因此表 4 只作排序参考,不作为任何固定比例引用。
复核时使用三台机器:Windows 11 22631、macOS 14.6.1 与 OpenWrt 23.05.3 虚拟机,命令输出与设备上一致。样本统计区间为 2026 年 9 月至 11 月,去重后 214 条。