使用AES加密時,當密鑰大於128時,代碼會拋出java.security.InvalidKeyException: Illegal key size or default parametershtml
Illegal key size or default parameters是指密鑰長度是受限制的,java運行時環境讀到的是受限的policy文件。文件位於${java_home}/jre/lib/securityjava
這種限制是由於美國對軟件出口的控制。算法
解決方法:安全
Java幾乎各類經常使用加密算法都能找到對應的實現。由於美國的出口限制,Sun經過權限文件(local_policy.jar、US_export_policy.jar)作了相應限制。所以存在一些問題:
●密鑰長度上不能知足需求(如:java.security.InvalidKeyException: Illegal key size or default parameters);
●部分算法未能支持,如MD四、SHA-224等算法;
●API使用起來還不是很方便;一些經常使用的進制轉換輔助工具未能提供,如Base64編碼轉換、十六進制編碼轉換等工具。服務器
Oracle在其官方網站上提供了無政策限制權限文件(Unlimited Strength Jurisdiction Policy Files),咱們只須要將其部署在JRE環境中,就能夠解決限制問題。
下載地址:
●Java 5.0 無政策限制文件
●Java 6 無政策限制文件
●Java 7 無政策限制文件
●其餘版本 無政策限制文件oracle
下載的壓縮包中僅有一個目錄,也就是jce目錄。該目錄中包含了4個文件:README.txt、COPYRIGHT.html、local_policy.jar和US_export_policy.jar。其中包含的兩個jar文件正是這次配置中用到的文件。
咱們能夠查看上述README.txt文件,你須要在JDK的JRE環境中,或者是JRE環境中配置上述兩個jar文件。
切換到%JDK_Home%\jre\lib\security目錄下,對應覆蓋local_policy.jar和US_export_policy.jar兩個文件。同時,你可能有必要在%JRE_Home%\lib\security目錄下,也須要對應覆蓋這兩個文件。
配置權限文件的最終目的是爲了使應用在運行環境中得到相應的權限,能夠增強應用的安全性。一般,咱們在應用服務器上安裝的是JRE,而不是JDK。所以,這就頗有必要在應用服務器的%JRE_Home%\lib\security目錄下,對應覆蓋這兩個權限文件。不少開發人員每每忽略了這一點,致使事故發生。工具