java中的AES 256算法遇到 Illegal key size or default parameters错的解决办法

转载自:http://blog.csdn.net/yaominhua/article/details/7458258

报错堆栈如下:

 

Caused:..InvalidKeyException IllegaldefaultcryptoCipheraDashoA13 na1.6
    at javaxcryptoCipheraDashoA13 na1.6
    at javaxcryptoCipheraDashoA13 na1.6
    at javaxcryptoCipherinitDashoA13 na1.6
    at javaxcryptoCipherinitDashoA13 na1.6
    at mypackageSomethingdecodeRC4Decoderjava25 mypackagejarna]

 

 

Google到问题原因,链接地址如下:

http://stackoverflow.com/questions/6481627/java-security-illegal-key-size-or-default-parameters

根据回答找到下载新jar包(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

把里面的两个jar包:local_policy.jar 和 US_export_policy.jar 替换掉原来安装目录C:\Program Files\Java\jre6\lib\security 下的两个jar包接可以了

然后就重新运行程序,不会报错了,测试代码如下:

public class Test {
    public static void main(String[] args) throws Exception {
         KeyGenerator keyGen = KeyGenerator.getInstance("AES");
         keyGen.init(256);
         SecretKey key = keyGen.generateKey();
         ObjectOutputStream oop = new ObjectOutputStream(new
         FileOutputStream("c:\\key.dat"));
         oop.writeObject(key);
         oop.close();
        
        String strTest = "Hello, Jason";
        byte[] strAfterAES = encryptData(strTest.getBytes());
        System.out.println(new String(strAfterAES));
        byte[] strOriContent = decryptData(strAfterAES);
        System.out.println(new String(strOriContent));
    }


    public static byte[] encryptData(byte[] input) throws Exception {
        ObjectInputStream in = new ObjectInputStream(new FileInputStream("c:\\key.dat"));
        SecretKey aeskey = (SecretKey) in.readObject();
        Cipher c1 = Cipher.getInstance("AES");
        c1.init(Cipher.ENCRYPT_MODE, aeskey);
        byte[] cipherByte = c1.doFinal(input);
        return cipherByte;
    }


    public static byte[] decryptData(byte[] input) throws Exception {
        ObjectInputStream in = new ObjectInputStream(new FileInputStream("c:\\key.dat"));
        SecretKey aeskey = (SecretKey) in.readObject();
        Cipher c1 = Cipher.getInstance("AES");
        c1.init(Cipher.DECRYPT_MODE, aeskey);
        byte[] clearByte = c1.doFinal(input);
        return clearByte;
    }
}

 

posted on 2015-02-10 16:42  hi_rain  阅读(2810)  评论(0)    收藏  举报