md5校验不一致极大概率由smb硬件卸载(如tcp校验和、lso、rsc)或smbv3签名/加密导致,需禁用网卡卸载功能并关闭smb签名与加密,再清缓存强制落盘后重新校验。

当你在Win10局域网共享中拷贝文件后发现MD5校验不一致,却反复确认源文件和目标文件内容完全相同,问题极大概率出在Windows启用的SMB协议硬件级校验和(SMB Direct / RDMA / CRC offload)或网络适配器的TCP/IP卸载功能干扰了数据流——它会在传输层悄悄修改数据包校验字段,导致certutil或PowerShell计算出的哈希值与原始文件不匹配,而文件本身并未损坏。
确认是否为硬件卸载导致的MD5异常
打开管理员权限的PowerShell,执行以下命令:
Get-NetAdapterAdvancedProperty -Name "*" -DisplayName "*offload*" | Where-Object {$_.DisplayValue -match "Enabled|开启"}
若输出中包含TcpipChecksumOffload、LsoV2IPv4、RscIPv4等条目且状态为Enabled,说明网卡正在执行校验和卸载。这会导致certutil -hashfile对刚拷贝完的文件计算出错误MD5/SHA256值——因为文件系统缓存或驱动层尚未完成最终写入同步,你校验的是“中间态”数据。
关闭网卡硬件校验和卸载
方法一:使用PowerShell一次性禁用全部关键卸载项
以管理员身份运行PowerShell,逐行执行:
Disable-NetAdapterAdvancedProperty -Name "*" -DisplayName "TCP/IP Checksum Offload" -NoRestart
Disable-NetAdapterAdvancedProperty -Name "*" -DisplayName "Large Send Offload V2 (IPv4)" -NoRestart
Disable-NetAdapterAdvancedProperty -Name "*" -DisplayName "Receive Side Scaling" -NoRestart
Disable-NetAdapterAdvancedProperty -Name "*" -DisplayName "Receive Segment Coalescing (IPv4)" -NoRestart
执行完毕后,【必须重启网卡或重启电脑】,否则设置不生效。可直接执行 Get-NetAdapter | Restart-NetAdapter 快速重启所有网卡。
方法二:通过图形界面关闭(适合不熟悉PowerShell的用户)
右键“此电脑”→“管理”→“设备管理器”→展开“网络适配器”→右键当前使用的网卡→“属性”→切换到“高级”选项卡→依次找到并设为“Disabled”的项包括:TCP Checksum Offload、Large Send Offload v2、RSS、RSC、SMB Direct、RDMA;每改一项点“确定”,全部改完后重启电脑。
禁用SMB协议自带的签名与加密校验干扰
Windows SMBv3默认启用签名(Signing)和加密(Encryption),它们虽提升安全,但某些NAS或旧设备在协商过程中可能引入不可见字节填充,造成哈希偏移。
在管理员PowerShell中执行:
Set-SmbServerConfiguration -RequireSecuritySignature $false -EncryptData $false -Force
该命令关闭SMB服务器端强制签名与加密。如仅客户端需调整,运行:
Set-SmbClientConfiguration -RequireSecuritySignature $false -EncryptData $false -Force
【执行后无需重启,但需断开并重连所有SMB共享映射】,否则旧会话仍沿用原策略。
验证卸载是否生效并重新校验
第一步:确认卸载已关闭
运行 Get-NetAdapterAdvancedProperty -Name "*" -DisplayName "*offload*" | Where-Object {$_.DisplayValue -eq "Disabled"}
应返回全部相关条目;若仍有Enabled残留,说明某项未成功关闭,需回到上一步重试。
第二步:清空系统缓存并强制落盘
拷贝文件后,不要立刻校验。先在管理员PowerShell中运行:
Clear-FileCache; fsutil behavior set disablelastaccess 1; echo. > NUL
然后等待5秒,再执行 certutil -hashfile "D:\share\file.zip" MD5
第三步:比对结果
此时得到的MD5值应与源文件完全一致。若仍不一致,说明问题不在卸载机制,而是文件本身被修改、共享路径存在符号链接跳转、或目标存储设备存在坏道——需另行排查。











