AES的256位密鑰加解密報 java.security.InvalidKeyException: Illegal key size or default parameters 異常的處理及處理工具

一、出現的現象

爲了數據代碼在傳輸過程中的安全,很多時候我們都會將要傳輸的數據進行加密,然後等對方拿到後再解密使用。我們在使用AES加解密的時候,在遇到128位密鑰加解密的時候,沒有進行什麼特殊處理;然而,在使用256位密鑰加解密的時候,如果不進行特殊處理的話,往往會出現報“java.security.InvalidKeyException: Illegal key size or default parameters”的異常,那麼這是爲什麼呢?今天我們來講一講。


二、爲什麼會出現這樣的現象

我們做Java開發,或是Android開發,都會先在電腦上安裝JDK(Java Development Kit) 並配置環境變量,JDK也就是 Java 語言的軟件開發工具包,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路徑,一版默認是:C:\Program Files\Java,具體看自己當時安裝JDK和JRE時選擇的路徑是什麼),其中包含有兩個.jar文件:“local_policy.jar ”和“US_export_policy.jar”,也就是我們平時說的jar包,再通俗一點說就是Java中包含的類庫(Sun公司的程序大牛封裝的類庫,供使用Java開發的程序員使用),這兩個jar包就是我們JCE中的核心類庫了。JRE中自帶的“local_policy.jar ”和“US_export_policy.jar”是支持128位密鑰的加密算法,而當我們要使用256位密鑰算法的時候,已經超出它的範圍,無法支持,所以纔會報:“java.security.InvalidKeyException: Illegal key size or default parameters”的異常。那麼我們怎麼解決呢?


三、怎麼解決這個異常

這個問題oracle公司早就替我們想到了(腦補一下,別懵了:Java是Sun開發的一種編程語言,2009年oracle宣佈收購Sun公司,從此兩家就是一家了),所以在oracle官網給我們提供有Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files X(即:Java加密擴展(JCE)無限強度權限政策文件),也就是所謂的JCE的無敵加強版,後面的“X”代表的是對應的JDK版本。該文件中只包含了“local_policy.jar ”和“US_export_policy.jar”這兩個jar包,我們只需要拿這兩個jar包替換掉自己JRE中的對應jar包就行了。

注意:需要特別注意的一點就是,替換的JCE版本要和自己電腦上的JDK版本一一對應。比如說:自己電腦上安裝的是JDK 8,則需要安裝與之對應的JCE版本Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8。

爲了方便大家,我這裏直接將官網地址貼上,節省大家的時間,也希望大家頂我一下。

JDK8:


下載完後,解壓,將其中的“local_policy.jar ”和“US_export_policy.jar”兩個文件替換掉自己%JAVE_HOME%\jre\lib\security文件夾下對應的原文件(%JAVE_HOME%是自己電腦的Java路徑)。

JDK7:


下載完後,解壓,將其中的“local_policy.jar ”和“US_export_policy.jar”兩個文件替換掉自己%JAVE_HOME%\jre\lib\security文件夾下對應的原文件(%JAVE_HOME%是自己電腦的Java路徑)。

JDK6:


下載完後,解壓,將其中的“local_policy.jar ”和“US_export_policy.jar”兩個文件替換掉自己%JAVE_HOME%\jre\lib\security文件夾下對應的原文件(%JAVE_HOME%是自己電腦的Java路徑)。

JDK5:

其對應的JCE下載地址爲:http://download.csdn.net/detail/scs2043/4237335

下載完後,解壓,將其中的“local_policy.jar ”和“US_export_policy.jar”兩個文件替換掉自己%JAVE_HOME%\jre\lib\security文件夾下對應的原文件(%JAVE_HOME%是自己電腦的Java路徑)。

現在最新的JCE是JCE8,不要問我爲什麼JCE5的不是官網的,而是csdn的下載頻道,我的回答是你如果現在還在用JDK5.0及其以下開發的,請繞道。

具體的下載、解壓、替換步驟:

1、下載


2、解壓



下載的JCE包就是上面的樣子,上圖中兩個分別對應JDK6和JDK8的JCE版本,我們將其加壓。



解壓後,我們可以看到,裏面只有三個文件,一個是README.txt(裏面全英文,是關於JCE的介紹什麼的,太長,我沒看,如果你有興趣的話可以看看),另外紅色框框住的兩個jar文件,就是我們需要的文件,我們複製這兩個文件。

3、替換



然後進入到自己電腦的“%JAVA_HOME%\jre\lib\security”(%JAVA_HOME%是自己電腦的Java路徑)文件夾下,替換掉對應的原文件。

4、然後關閉文件夾,重啓Eclipse或者Android Studio


恭喜你,你成功的解決了“java.security.InvalidKeyException: Illegal key size or default parameters”異常!!!

如果想看AES的128、256位密鑰加密解密的算法,請點擊 這裏 

希望能對你有用!如果有什麼疑問或不對的地方,請一定要留言告訴我,我們相互溝通交流一下,一定要留言告訴我哦!

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