1. 程式人生 > >AES加密時的 java.security.InvalidKeyException: Illegal key size 異常

AES加密時的 java.security.InvalidKeyException: Illegal key size 異常

轉自:http://www.cnblogs.com/milton/p/5058566.html

程式程式碼

複製程式碼
            // 設定加密模式為AES的CBC模式
            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
            SecretKeySpec keySpec = new SecretKeySpec(aesKey, "AES");
            IvParameterSpec iv = new IvParameterSpec(aesKey, 0, 16);
            cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv);

            
// 加密 byte[] encrypted = cipher.doFinal(unencrypted); ...
複製程式碼

當執行到

cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv);

時, 如果金鑰大於128, 會丟擲java.security.InvalidKeyException: Illegal key size 異常. 因為金鑰長度是受限制的, java執行時環境讀到的是受限的policy檔案. 檔案位於${java_home}/jre/lib/security, 這種限制是因為美國對軟體出口的控制.

處理辦法: 在官方網站下載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