notepad++本身不支持可靠计算文件md5值,因其仅对已加载的文本内容哈希,受编码、换行符及二进制截断影响;应使用windows自带certutil等直接读取磁盘原始字节的工具。

MD5 计算必须读取磁盘原始字节,而 Notepad++ 只能访问它自己加载进内存的文本内容,中间隔着编码转换、行尾归一化、二进制截断三层干扰。哪怕界面上显示“工具 → MD5”,那也是旧插件残留菜单,实际结果不可信。
为什么 NppCrypt / Hasher 插件算出来的 MD5 总是不对
这些插件(如 NppCrypt 或已停更的 Hasher)工作方式是:把当前编辑器里渲染出的字符串,按当前编码(比如 UTF-8 BOM 或 ANSI)转成字节数组,再喂给哈希函数。这就导致:
- 对二进制文件(
.exe、.zip)直接乱码,哈希值完全失真 - 同一份文件用 UTF-8 和 UTF-8-BOM 打开,
MD5值不同 - Windows 换行符
CRLF被自动转成LF或反之,哈希变动 - v8+ 版本中插件 API 不兼容,
Plugin DLL not loaded是常态,不是你安装错了
Windows 下真正可靠的做法:用 certutil
certutil 是 Windows 自带、无需安装、直读磁盘字节的工具,结果与官方发布页一致。注意三点:
- 路径含空格必须加英文双引号:
certutil -hashfile "C:\My Tools\npp.8.6.1.Installer.x64.exe" MD5 - 输出共三行,有效哈希值恒在第二行;想过滤掉头尾,用:
certutil -hashfile file.exe MD5 | findstr /v "hash" - 算法名建议大写:
MD5、SHA256,小写在部分系统可能静默失败
PowerShell Get-FileHash 能用,但有隐藏陷阱
如果你坚持在 Notepad++ 内触发命令,可用 NppExec 执行:
cmd /c powershell -Command "Get-FileHash -Path \"$(FULL_CURRENT_PATH)\" -Algorithm MD5 | ForEach-Object {$_.Hash}"
但要注意:
-
$(FULL_CURRENT_PATH)在路径含中文或空格时容易被截断,必须用反斜杠转义双引号包裹 - PowerShell 执行策略需为
RemoteSigned(运行Get-ExecutionPolicy确认) - 每次执行会闪一下黑窗,大文件卡顿明显,不如直接开终端
certutil 和 Get-FileHash 都只认磁盘上那个“已写入”的文件。改完记得先 Ctrl+S。











