最近做的winform项目中,有个功能使用了MD5 加密,本地测试是没有问题的,但是上线后有些用户反馈说提示如下错误
一、问题描述
中文版错误截图
英语版错误截图
具体错误信息:
有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。 ************** 异常文本 **************
System.InvalidOperationException: 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。
(以下隐藏了项目的信息) ************** 已加载的程序集 **************
mscorlib
程序集版本:4.0.0.0
Win32 版本:4.7.3324.0 built by: NET472REL1LAST_C
基本代码:file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll
----------------------------------------
HelloFont
程序集版本:2.2.0.1
Win32 版本:2.2.0.1
基本代码:file:///D:/HyProject/GitHub/HelloFont/HanyiCloud/bin/Debug/HelloFont.exe
----------------------------------------
System.Windows.Forms
程序集版本:4.0.0.0
Win32 版本:4.7.3324.0 built by: NET472REL1LAST_C
基本代码:file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
程序集版本:4.0.0.0
Win32 版本:4.7.3353.0 built by: NET472REL1LAST_B
基本代码:file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
程序集版本:4.0.0.0
Win32 版本:4.7.3190.0 built by: NET472REL1LAST_C
基本代码:file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
iHawkAppControl
程序集版本:1.0.0.0
Win32 版本:1.0.0.0
基本代码:file:///D:/HyProject/GitHub/HelloFont/HanyiCloud/bin/Debug/iHawkAppControl.DLL
----------------------------------------
iHawkAppLibrary
程序集版本:1.0.0.0
Win32 版本:1.0.0.0
基本代码:file:///D:/HyProject/GitHub/HelloFont/HanyiCloud/bin/Debug/iHawkAppLibrary.DLL
----------------------------------------
HanyiCloudEntity
程序集版本:1.0.0.0
Win32 版本:1.0.0.0
基本代码:file:///D:/HyProject/GitHub/HelloFont/HanyiCloud/bin/Debug/HanyiCloudEntity.DLL
----------------------------------------
System.Net.Http
程序集版本:4.0.0.0
Win32 版本:4.7.3190.0 built by: NET472REL1LAST_C
基本代码:file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Net.Http/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll
----------------------------------------
System.Core
程序集版本:4.0.0.0
Win32 版本:4.7.3324.0 built by: NET472REL1LAST_C
基本代码:file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Configuration
程序集版本:4.0.0.0
Win32 版本:4.7.3324.0 built by: NET472REL1LAST_C
基本代码:file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
程序集版本:4.0.0.0
Win32 版本:4.7.3190.0 built by: NET472REL1LAST_C
基本代码:file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
Newtonsoft.Json
程序集版本:12.0.0.0
Win32 版本:12.0.2.23222
基本代码:file:///D:/HyProject/GitHub/HelloFont/HanyiCloud/bin/Debug/Newtonsoft.Json.DLL
----------------------------------------
System.Numerics
程序集版本:4.0.0.0
Win32 版本:4.7.3190.0 built by: NET472REL1LAST_C
基本代码:file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll
----------------------------------------
System.Runtime.Serialization
程序集版本:4.0.0.0
Win32 版本:4.7.3324.0 built by: NET472REL1LAST_C
基本代码:file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Serialization/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll
----------------------------------------
System.Data
程序集版本:4.0.0.0
Win32 版本:4.7.3260.0 built by: NET472REL1LAST_C
基本代码:file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_64/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
HanyiCloudClient
程序集版本:1.0.0.0
Win32 版本:1.0.0.0
基本代码:file:///D:/HyProject/GitHub/HelloFont/HanyiCloud/bin/Debug/HanyiCloudClient.DLL
----------------------------------------
Gdu.WinFormUI
程序集版本:1.0.0.0
Win32 版本:1.0.0.0
基本代码:file:///D:/HyProject/GitHub/HelloFont/HanyiCloud/bin/Debug/Gdu.WinFormUI.DLL
----------------------------------------
mscorlib.resources
程序集版本:4.0.0.0
Win32 版本:4.7.3190.0 built by: NET472REL1LAST_C
基本代码:file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
System.resources
程序集版本:4.0.0.0
Win32 版本:4.7.3190.0 built by: NET472REL1LAST_C
基本代码:file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/System.resources.dll
----------------------------------------
iHawkWeChatLoginLibrary
程序集版本:1.0.0.0
Win32 版本:1.0.0.0
基本代码:file:///D:/HyProject/GitHub/HelloFont/HanyiCloud/bin/Debug/iHawkWeChatLoginLibrary.DLL
----------------------------------------
System.Management
程序集版本:4.0.0.0
Win32 版本:4.7.3190.0 built by: NET472REL1LAST_C
基本代码:file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Management/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Management.dll
----------------------------------------
Microsoft.mshtml
程序集版本:7.0.3300.0
Win32 版本:7.0.3300.0
基本代码:file:///C:/WINDOWS/assembly/GAC/Microsoft.mshtml/7.0.3300.0__b03f5f7f11d50a3a/Microsoft.mshtml.dll
----------------------------------------
iHawkFontLibrary
程序集版本:1.0.0.0
Win32 版本:1.0.0.0
基本代码:file:///D:/HyProject/GitHub/HelloFont/HanyiCloud/bin/Debug/iHawkFontLibrary.DLL
----------------------------------------
System.Windows.Forms.resources
程序集版本:4.0.0.0
Win32 版本:4.7.3190.0 built by: NET472REL1LAST_C
基本代码:file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/System.Windows.Forms.resources.dll
---------------------------------------- ************** JIT 调试 **************
要启用实时(JIT)调试,
该应用程序或计算机的 .config 文件(machine.config)的 system.windows.forms 节中必须设置
jitDebugging 值。
编译应用程序时还必须启用
调试。 例如: <configuration>
<system.windows.forms jitDebugging="true" />
</configuration> 启用 JIT 调试后,任何未经处理的异常
都将被发送到在此计算机上注册的 JIT 调试程序,
而不是由此对话框处理。
二、错误分析
FIPS是标准技术与标准国家协会为联邦计算机系统制定的标准和指南,用于描述文件处理、加密算法和其他信息技术标准的标准。
不建议您启用FIPS模式,除非您是*机构或被强制使用该模式,如果您的设备勾选该模式可能会导致部分应用程序无法正常使用。为何要关闭“FIPS”模式,该加密协议仅适合*机构或一些特定机构的计算机,若个人设备勾选FIPS模式,则强制本计算机使用经过FIPS验证的加密协议,
启用FIPS模式后所有的应用程序只能使用经过FIPS验证的加密。大部分桌面应用程序采用的都是更快更安全的加密协议,部分应用的加密协议实际并没有通过FIPS认证。恰巧我使用的MD5加密就没有通过FIFS的认证。
三、解决方法
1、通过修改注册表解决 FIPS不兼容MD5
“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy" 的enable设置为0 ,然后重启软件。
具体做法:
首先按住“Windows + R”键,弹出运行对话框,在运行对话框输入“regedit”进入注册表,点击“确定”
打开你需要的数值,鼠标右键该数值,点击“修改”
2、第二种方法,修改本地策略
具体方法如下:
Win+R组合键打开“运行”窗口,输入gpedit.msc命令打开本地组策略编辑器。
导航到组策略编辑器中的“计算机配置/Windows设置/安全设置/本地策略/安全选项”
点击“安全选项”后在右侧窗口中找到“系统加密:将FIPS兼容算法用于加密、哈希和签名”设置,然后双击它,设置如下:
3、第三种方法 通过设置应用程序配置文件中<enforceFIPSPolicy>元素值为false解决:
<configuration>
<runtime>
<enforceFIPSPolicy enabled="false"/>
</runtime>
</configuration>
4、第四个方法,改用FIFS认证的加密算法。。。。。
可能还有其他更好的方法,以上方法并不是每种方法都适用,也要视情况而定。