zoukankan      html  css  js  c++  java
  • 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%libsecurity目录下覆盖原来的文件。
    如果安装了JDK,还要将两个jar文件也放到%JDK_HOME%jrelibsecurity目录下覆盖原来文件。

     

  • 相关阅读:
    提高.NET编程水平的50个要点(转载)
    动态生成Menu
    C#实现二叉树外带中序遍历(转载)
    我的XML学习笔记<续>
    泛型的排序问题
    我的XML学习笔记
    动态存储过程分页
    排序算法汇总(转载收藏)
    中兴u880e刷机root教程(含刷第三方recover)
    如何清理ipod touch iPhone ipad的“其他”文件
  • 原文地址:https://www.cnblogs.com/huozhonghun/p/14533836.html
Copyright © 2011-2022 走看看