一、出現的現象
爲了數據代碼在傳輸過程中的安全,很多時候我們都會將要傳輸的數據進行加密,然後等對方拿到後再解密使用。我們在使用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”的異常。那麼我們怎麼解決呢?
三、怎麼解決這個異常
下載完後,解壓,將其中的“local_policy.jar ”和“US_export_policy.jar”兩個文件替換掉自己%JAVE_HOME%\jre\lib\security文件夾下對應的原文件(%JAVE_HOME%是自己電腦的Java路徑)。
下載完後,解壓,將其中的“local_policy.jar ”和“US_export_policy.jar”兩個文件替換掉自己%JAVE_HOME%\jre\lib\security文件夾下對應的原文件(%JAVE_HOME%是自己電腦的Java路徑)。
JDK5:下載完後,解壓,將其中的“local_policy.jar ”和“US_export_policy.jar”兩個文件替換掉自己%JAVE_HOME%\jre\lib\security文件夾下對應的原文件(%JAVE_HOME%是自己電腦的Java路徑)。
其對應的JCE下載地址爲:http://download.csdn.net/detail/scs2043/4237335下載完後,解壓,將其中的“local_policy.jar ”和“US_export_policy.jar”兩個文件替換掉自己%JAVE_HOME%\jre\lib\security文件夾下對應的原文件(%JAVE_HOME%是自己電腦的Java路徑)。
具體的下載、解壓、替換步驟:
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位密鑰加密解密的算法,請點擊 這裏