1. 程式人生 > >系統禁用執行FIPS政策導致程式發生“呼叫的目標發生了異常”

系統禁用執行FIPS政策導致程式發生“呼叫的目標發生了異常”

工具是使用AES-256-CBC加密演算法

 問題

最近有客戶反映, 在使用我們工具時候,會出現“呼叫的目標發生了異常”錯誤, 接到反饋之後, 我們進行了很多測試,甚至得到客戶系統資訊和framework版本, 但是都沒有得到復現。測試,debug,log列印各種嘗試,無果。

**報錯資訊顯示:** 

導致錯誤資訊 : 呼叫的目標發生了異常。
導致錯誤的方法 :System.RuntimeMethodHandle.InvokeMethod

在 System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
在 System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
在 System.Security.Cryptography.CryptoConfig.CreateFromName(String name, Object[] args)
在 System.Security.Cryptography.Rijndael.Create()
在 名稱空間.類名..ctor(CryptType type, String key, String Iv)


 原因

最後在Q群裡一位大哥(在此非常感謝),給了微軟的相關資訊連結, 在連結的解決方法處提到

使用的加密演算法不符合聯邦資訊處理標準(FIPS)。在組策略中啟用了Windows安全選項“系統加密”

  

原來不是軟體的鍋, 電腦配置導致:系統的組策略安全設定導致無法使用此演算法。


解決辦法

 方法一

按Win+R(或點選開始-執行),並輸入regedit後確定,啟動登錄檔編輯器。

瀏覽到計算機\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy,將Enabled的值改為0

關閉登錄檔編輯器後,重新開啟軟體。

 

 方法二

在config檔案中配置檔案根目錄下新增, 在執行時禁用執行FIPS政策

<runtime>
<enforceFIPSPolicy enabled="false"/>
</runtime>

  

 建議

由於使用者的不確定性,因為你不知道使用者對電腦的瞭解程度, 且修改登錄檔是件很危險的事兒, 建議使用方法二

 結尾
希望我的這篇文字能幫助遇到同樣問題的你。