InvalidKeyException: Illegal key size

 java.security.InvalidKeyException: Illegal key size。

SecretKeySpec secretKeySpec = new SecretKeySpec(aesKey, "AES");
        Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding");
        IvParameterSpec ips = createCtrIv(nonce);
        cipher.init(1, secretKeySpec, ips);    //當代碼運行到這一行時就報錯了。爆出上面的異常

感到一臉懵逼,還好網絡是萬能的,百度一下,簡單對比一下,就找到了解決方案。而後測試以後發現也是沒有問題的。html

異常緣由:若是密鑰大於128, 會拋出java.security.InvalidKeyException: Illegal key size 異常. 由於密鑰長度是受限制的, java運行時環境讀到的是受限的policy文件. 文件位於${java_home}/jre/lib/security, 這種限制是由於美國對軟件出口的控制.java

解決方案:去官方下載JCE無限制權限策略文件。網絡

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

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 spa

下載後解壓,能夠看到local_policy.jar和US_export_policy.jar以及readme.txt
若是安裝了JRE,將兩個jar文件放到%JRE_HOME%\lib\security目錄下覆蓋原來的文件
若是安裝了JDK,還要將兩個jar文件也放到%JDK_HOME%\jre\lib\security目錄下覆蓋原來文件。htm

 

而後DuangDuangDuangDuang,就ok了。ip

相關文章
相關標籤/搜索