java.security.InvalidKeyException: Illegal key size錯誤

新使用了AES的256位密鑰加解密,項目上線後發現生產在加密的時候報java.security.InvalidKeyException: Illegal key size錯誤,而本地和測試環境都是沒問題的。

產生錯誤原因:爲了數據代碼在傳輸過程中的安全,很多時候我們都會將要傳輸的數據進行加密,然後等對方拿到後再解密使用。我們在使用AES加解密的時候,在遇到128位密鑰加解密的時候,沒有進行什麼特殊處理;然而,在使用256位密鑰加解密的時候,如果不進行特殊處理的話,可能會因爲jdk版本的問題出現這個異常java.security.InvalidKeyException: Illegal key size。

爲什麼會產生這樣的錯誤?

我們做Java開發,都會先在電腦上安裝JDK(Java Development Kit) 並配置環境變量,JDK中包含有JRE(Java Runtime Environment,即:Java運行環境),JRE中包括Java虛擬機(Java Virtual Machine)、Java核心類庫和支持文件,而我們今天要說的主角就在Java的核心類庫中。在Java的核心類庫中有一個JCE(Java Cryptography Extension),JCE是一組包,它們提供用於加密、密鑰生成和協商以及 Message Authentication Code(MAC)算法的框架和實現,所以這個是實現加密解密的重要類庫。

在我們安裝的JRE目錄下有這樣一個文件夾:%JAVE_HOME%\jre\lib\security(%JAVE_HOME%是自己電腦的Java路徑,),其中包含有兩個.jar文件:“local_policy.jar ”和“US_export_policy.jar”,也就是我們平時說的jar包,這兩個jar包就是我們JCE中的核心類庫了。JRE中自帶的“local_policy.jar ”和“US_export_policy.jar”是支持128位密鑰的加密算法,而當我們要使用256位密鑰算法的時候,已經超出它的範圍,無法支持,所以纔會報:“java.security.InvalidKeyException: Illegal key size or default parameters”的異常。

那麼我們怎麼解決呢?

首先進入%JAVE_HOME%/jre/lib/security/ 目錄,看下目錄裏面是有一個 policy 文件夾,還是有local_policy.jar,

US_export_policy.jar兩個jar包,如下兩種情況

第一種情況:如果有policy 文件夾,說明此版本爲JVM啓用 無限制強度管轄策略 有了一種新的更簡單的方法。

請在 當前文件夾中查找文件 java.security。

現在用文本編輯器打開java.security,並找到定義java安全性屬性crypto.policy的行,它可以有兩個值limited或unlimited - 默認值是limited。

默認情況下,您應該能找到一條註釋掉的行:

#crypto.policy=unlimited
您可以通過取消註釋該行來啓用無限制,刪除#:

crypto.policy=unlimited
現在重新啓動指向JVM的Java應用程序即可。

第二種情況:沒有policy 文件夾,而是直接就有local_policy.jar,US_export_policy.jar兩個jar包。

去官方下載JCE無限制權限策略文件。

jdk 5: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-plat-419418.html#jce_policy-1.5.0-oth-JPR

jdk6: http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

JDK7的下載地址: http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
JDK8的下載地址: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html 

下載後解壓,可以看到local_policy.jar和US_export_policy.jar以及readme.txt
將兩個jar文件放到%JAVE_HOME%\jre\lib\security目錄下覆蓋原來文件。 之後重啓即可成功。

(2條消息) java.security.InvalidKeyException: Illegal key size錯誤_佇望向北的博客-CSDN博客

JDK1.8 導致系統報錯:java.security.InvalidKeyException:illegal Key Size (crap.cn)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章