Java异常:java.security.InvalidKeyException: Illegal key size

出现问题的代码

 1 public static String aesEncrypt(String content, String key) {
 2     try {
 3         if (key == null) {
 4             System.err.println("key为空null");
 5             return null;
 6         }
 7         key = MD5Util.encodeMD5(key, CHARSET);
 8         // 判断Key是否为32位
 9         if (key.length() != 32) {
10             System.err.println("key长度不是32位");
11             return null;
12         }
13         Security.addProvider(new BouncyCastleProvider());
14         SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES");
15         IvParameterSpec ivSpec = new IvParameterSpec(IVS.getBytes());// 使用CBC模式,需要一个向量,可增加加密算法的强度
16         Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");// "算法/模式/补码方式"
17         cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivSpec);
18         byte[] encrypted = cipher.doFinal(content.getBytes());
19         return Base64.encode(encrypted);// 此处使用BASE64做转码功能,同时能起到2次加密的作用。
20     } catch (Exception e) {
21         e.printStackTrace();
22         return null;
23     }
24 }

原因

在Java8中,如果密钥大于128, 会抛出java.security.InvalidKeyException: Illegal key size 异常. 因为密钥长度是受限制的, java运行时环境读到的是受限的policy文件. 文件位于${java_home}/jre/lib/security, 这种限制是因为美国对软件出口的控制.

解决

需要下载两个jar包进行覆盖,下载地址

  链接:https://pan.baidu.com/s/1xYIKWfdw3jDd-dDUpwl0kg
  提取码:3qtn

下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt 。
如果安装了JRE,将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件。
如果安装了JDK,还要将两个jar文件也放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件。

 

posted @ 2021-03-14 20:01  程序员Forlan  阅读(872)  评论(0编辑  收藏  举报