1. 程式人生 > 其它 >java.security.InvalidKeyException: Illegal key size錯誤

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”的異常。

那麼我們怎麼解決呢?

第一種情況:如果有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目錄下覆蓋原來檔案。


轉載

希望能幫到你.歡迎提出疑問,大家一塊探討.