系統禁用執行FIPS政策導致程式發生“呼叫的目標發生了異常”
阿新 • • 發佈:2019-01-09
工具是使用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>
建議
由於使用者的不確定性,因為你不知道使用者對電腦的瞭解程度, 且修改登錄檔是件很危險的事兒, 建議使用方法二
結尾
希望我的這篇文字能幫助遇到同樣問題的你。