java:使用JCE安全策略版本8后使用aes加密时密钥大小无效

时间:2018-02-20 14:00:05

标签: java encryption aes

我试图生成大小为256位的AES密钥,并且我下载了版本8的JCE安全策略,并将US_export_policy.jar和local_policy.jar放在jre / lib / security文件夹中。我在代码中遗漏了什么,可能是异常的原因?

这就是我编码的内容,它给了我非法的密钥大小异常。

以下是代码:

            kgen = KeyGenerator.getInstance("AES");
            kgen.init(256);
            SecretKey skey = kgen.generateKey();
            byte[] iv = new byte[16];
            SecureRandom srandom = new SecureRandom();
            srandom.nextBytes(iv);
            IvParameterSpec ivspec = new IvParameterSpec(iv);
            System.out.println(iv);

这里,iv是我在代码中进一步使用的初始化向量。

非常感谢您的帮助和提前感谢。

这是我得到的例外:

java.security.InvalidKeyException: Illegal key size
    at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1039)
    at javax.crypto.Cipher.implInit(Cipher.java:805)
    at javax.crypto.Cipher.chooseProvider(Cipher.java:864)
    at javax.crypto.Cipher.init(Cipher.java:1396)
    at javax.crypto.Cipher.init(Cipher.java:1327)
    at com.global.DocMananger.Crypto.main(Crypto.java:145)

这是引发错误的行:

Cipher cipherAES = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipherAES.init(Cipher.ENCRYPT_MODE, skey, ivspec);

1 个答案:

答案 0 :(得分:0)

使用jdk1.8.0_91包,它将在更改JCE策略文件后起作用。

jdk1.8.0_144中,它甚至无法更改JCE文件。似乎它在该版本中存在一些问题。请教您在Java8论坛中查询此事。