
这个工具解决什么问题
从网盘、官网或同事那里拿到一个安装包、一份资料,想确认它有没有在传输中损坏、有没有被人改过,最可靠的办法是对一下校验值。可问题是:算哈希这件事,在 Windows 上默认没有现成的图形界面入口。要么去搜一个在线工具把文件传上去(大文件传不动,还担心泄露),要么硬着头皮开命令行敲 certutil,一边敲一边担心路径里有空格、参数写错了。一次两次还行,如果手上是几十个文件要逐个核对,靠命令行基本没法做。
- 原来的做法:开命令行,手敲 certutil -hashfile 加一长串路径,一个文件敲一次;或者把文件传到在线哈希网站,等上传、等结果,大文件基本不可用。
- 用这个工具:把文件(或整个文件夹)直接拖进窗口,勾选要算的算法,点「开始计算」,几秒钟后列表里每行都填好 MD5 / SHA1 / SHA256,一键导出 CSV。
- 省下来的:几十个文件的校验值,原来要十几分钟且容易敲错路径;现在拖进去点一下,10 秒出结果,导出后可直接发给人核对。
技术实现
用 C# + .NET Framework 4.8 写成 WinForms 单窗口程序,编译成单个 exe。选这个技术栈的原因是:.NET Framework 4.8 是 Windows 10/11 系统自带的运行时,用户拿到 exe 双击就能开,不需要额外装 Python、不需要装 .NET,启动速度也比解释型方案快。哈希计算全部走 System.Security.Cryptography 里的标准实现(MD5 / SHA1 / SHA256),不做任何自定义算法,结果与 certutil、sha256sum 完全一致。
- 分块增量哈希,不怕大文件:不用 File.ReadAllBytes 一次性读入(几个 GB 的文件会直接内存溢出),而是用 FileStream 每次读 1MB,通过 HashAlgorithm.TransformBlock 增量喂给算法,最后 TransformFinalBlock 收尾。内存占用与文件大小无关,恒定在 1MB 量级。
- BackgroundWorker 后台计算,界面不假死:哈希计算放在 BackgroundWorker 的 DoWork 里执行,进度通过 ReportProgress 回到主线程刷新进度条和列表。全程不跨线程直接操作控件,避免 WinForms 常见的跨线程访问异常。
- 拖拽投放 + 系统文件对话框:窗口和列表都挂了 AllowDrop,DragEnter 判断 DataFormats.FileDrop 后置为 Copy 效果;选文件走 OpenFileDialog、选文件夹走 FolderBrowserDialog。用户全程不需要手打路径。
- 按完整路径去重:重复拖入同一个文件不会产生重复行,比较时用 OrdinalIgnoreCase(Windows 路径大小写不敏感)。
- 导出 CSV 带 UTF-8 BOM:StreamWriter 用 new UTF8Encoding(true) 写出 BOM,Excel 双击打开中文列名和文件名不会变成乱码;字段含逗号或引号时按 CSV 规范加引号转义。
- 界面不暴露本机路径:列表只显示文件名,完整路径放在悬浮提示(ToolTipText)里,截图或录屏分享时不会带出本机目录结构。导出 CSV 里才包含完整路径,方便批量核对。
技术栈:C# 5.0、.NET Framework 4.8、WinForms 窗体
已知局限:受限于 .NET Framework 自带算法,未包含 SHA3 / BLAKE2 等新算法;超大文件(数十 GB)计算期间进度条按「已完成文件数」推进,单文件内部不细分进度。
操作教程
- 打开程序
解压后双击 exe,出现主窗口,列表为空,底部提示「把文件或文件夹拖进下面的列表」。
预期结果:窗口正常打开,能看到添加文件、添加文件夹、开始计算等按钮。 - 加入要计算的文件
把文件或文件夹直接从资源管理器拖进窗口中间的结果列表;也可以点「添加文件」用系统对话框多选,或点「添加文件夹」整目录加入。勾选「包含子文件夹」可递归收集。
预期结果:列表里出现文件行,显示序号、文件名和大小;底部状态栏显示当前待计算数量。 - 选择算法
在底部勾选需要计算的算法,默认 MD5、SHA1、SHA256 三个都勾上。只想要其中一个就把其它的取消勾选,计算更快。
预期结果:勾选框状态符合预期。 - 开始计算
点「开始计算」按钮。计算在后台进行,进度条和状态文字会实时刷新,界面上其它按钮暂时置灰防止误操作。
预期结果:进度条走到 100%,列表里 MD5/SHA1/SHA256 三列依次填满,状态栏提示「计算完成」。 - 核对结果
把鼠标停在某一行上,可以看到该文件的完整路径。把计算出来的值与官方公布的校验值逐位对比即可。
预期结果:鼠标悬浮显示完整路径;哈希值全为小写十六进制字符串。 - 导出留档
点「导出 CSV」,选择保存位置。导出文件用 Excel 或记事本都能直接打开。
预期结果:生成 CSV 文件,含序号、文件名、完整路径、大小、MD5、SHA1、SHA256 七列。 - 移除或清空
选中若干行点「移除选中」可去掉;点「清空列表」重置全部。
预期结果:列表按操作更新,底部数量同步变化。
整个过程不需要打开命令行,也不需要联网,文件始终在本机读取。
常见问题
技术实现与后续维护
本工具由我们自行开发并持续维护,每次迭代都经过本地自测。核心逻辑集中在 MainForm.cs 一个文件里,哈希计算部分是一个静态方法 ComputeHash,与界面完全解耦,改动时不影响其它部分。
技术构成:
src/MainForm.cs—— 唯一源码文件:窗口搭建、文件收集、后台哈希计算、CSV 导出DOCS/开发文档.md—— 工程结构、技术实现要点、编译方式与扩展点
运行环境:
使用 .NET Framework 4.8 自带的 csc.exe 编译,无需 Visual Studio:
csc /target:winexe /out:文件校验值拖拽计算.exe /platform:anycpu /optimize+ /reference:System.Windows.Forms.dll /reference:System.Drawing.dll src\MainForm.cs
也可以在 Visual Studio 2019/2022 中新建「.NET Framework 4.8」Windows 窗体项目,把 src\MainForm.cs 加入后直接生成。
可扩展方向:
- 接入 SHA512 / CRC32 等更多哈希算法(只需在 ComputeHash 的 switch 里加分支)
- 增加「与预期值比对」功能,读入官方校验文件后自动标红不一致项
- 把结果导出成 xlsx 或直接复制到剪贴板
- 对目录做定时扫描,文件指纹变化时弹窗提醒
本工具免费提供使用,但不对外分发源码。如果你需要在本工具基础上做功能调整、对接内部系统或长期维护,可以联系我们做二次开发,源码与工程文档可在定制合作中一并交付。
需要其它功能?可以定制
这个工具只做一件事:要核对下载的文件是否完整,用命令行算哈希对普通用户门槛太高。如果你的场景还需要别的处理,可以联系我们做二次开发,按你的实际数据格式和流程定制。
常见的定制需求:
- 批量校验后自动和官方公布的校验值文件(如 SHA256SUMS)比对,标出不一致的文件
- 增加 SHA512 / CRC32 / BLAKE2 等更多算法
- 把校验结果写成带格式的 Excel 报表,按目录分组
- 定时扫描指定目录,发现文件被改动就告警
- 联系方式:邮箱/微信见站内「联系我们」页面,或在本文下方留言
- 定制说明:请附上你的数据样例(脱敏即可)和期望结果,方便快速评估工作量
- 交付形式:定制项目可交付可执行程序,按需一并交付源码与工程文档,支持长期维护
使用说明与免责声明
- 本工具在本地运行,不联网、不上传任何数据到服务器。
- 涉及文件改写的功能,请在使用前备份原始文件。
- 软件完全免费,可自由使用与转发,请勿用于倒卖。
- 因误操作造成的数据问题请自行承担。

