[問題記錄.dotnet]解決“此實現不是 Windows 平臺 FIPS 驗證的加密演算法的一部分”
阿新 • • 發佈:2019-02-02
現象:
在個別機器上,下列程式碼會導致異常:
程式碼 new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(bytes, offset, count); |
異常 System.InvalidOperationException: 此實現不是 Windows 平臺 FIPS 驗證的加密演算法的一部分。 ...... |
根據錯誤資訊在網上搜索了下,看到很多人都是說修改登錄檔解決, 但是原因卻不清楚。
登錄檔修改“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy\Enabled”值為0就可以解決。
進一步查詢相關資料,得知是與聯邦資訊處理標準 (FIPS,全稱是Federal
Information Processing Standard)相關。如果機器啟用了FIPS策略(前面提到那個登錄檔項Enabled為1),那麼此時呼叫MD5CryptoServiceProvider就會丟擲Invalid
Operation Exception異常。
MSDN中有相關說明:
從.NET Framework 2.0開始,實現加密演算法類的建立被受控於計算機的配置。 如果應用程式執行在其配置需要符合 FIPS 的計算機上,並且應用程式使用與 FIPS 不相容的演算法,則您可使用配置檔案中的元素防止公共語言執行時 (CLR) 強制實施 FIPS 相容性。 此元素在 .NET Framework 2.0 版 Service Pack 1 中引進。 |
所以,還可以通過設定應用程式配置檔案中<enforceFIPSPolicy>元素值為false解決:
<configuration> <runtime> <enforceFIPSPolicy enabled="false"/> </runtime> </configuration>
參考: