使用加密算法报错异常:java.security.InvalidKeyException: Illegal key size

简介: 使用加密算法报错异常:java.security.InvalidKeyException: Illegal key size

之前文章有提到过(常用对称加密算法之AES算法-CBC模式),因为需求的需要,使用到了对称加密算法AES算法,开发完毕并测试通过了,但是后来有同事反馈,当他的项目使用到加密这一步的时候就会报错。


报错信息


java.security.InvalidKeyException: Illegal key size

// 加密
public static String encrypt(String password) throws Exception {
    Cipher cipher = Cipher.getInstance(INSTANCE);
    SecretKeySpec keySpec = new SecretKeySpec(BYTES_KEY, AES);
    // CBC模式需要生成一个16 bytes的initialization vector
    SecureRandom sr = SecureRandom.getInstanceStrong();
    byte[] iv = sr.generateSeed(16);
    IvParameterSpec ivps = new IvParameterSpec(iv);
    cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivps);//运行到这一行时就报上面的异常
    byte[] data = cipher.doFinal(password.getBytes(StandardCharsets.UTF_8));
    // IV不需要保密,把IV和密文一起返回
    return DatatypeConverter.printBase64Binary(join(iv, data));
}

奇怪的是只有这个同事的有问题


查找原因


通过谷歌发现根本原因:JDK版本的不同

直接原因:


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


解决


这里建议直接更换JDK,现在较为普遍使用的jdk8版本,事实也证明,jdk8没有遇到这种长度限制


这里给大家提供下jdk8下载版本


MAC版

链接: https://pan.baidu.com/s/1649IuAnx79pmvsTaGIJJAA 提取码: uv38


Linux版

链接: https://pan.baidu.com/s/1IsWdCbv0h0htFpm0M-Gf0Q 提取码: 2f4w


Windows版

链接: https://pan.baidu.com/s/1slN99jqwS0afoJhldoBDYg 提取码: wmbk


如果获取出现问题可私信我发你

目录
相关文章
|
25天前
|
Linux 数据安全/隐私保护 Windows
aes加密在linux下会生成随机key的解决办法
aes加密在linux下会生成随机key的解决办法
14 2
|
27天前
启动报错:java.nio.charset.MalformedInputException: Input length = 1
启动报错:java.nio.charset.MalformedInputException: Input length = 1
16 0
|
1月前
|
Java 编译器
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
有关电脑中idea编译报错问题java: No implementation was created for AdminUserConverter due to having a problem in
33 0
|
15天前
|
Java Maven
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
35 3
|
2天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
14天前
|
Java 应用服务中间件 Maven
使用IDEA搭建SpringMVC环境,Maven导入了依赖,但是运行报错 java.lang.ClassNotFoundException
使用IDEA搭建SpringMVC环境,Maven导入了依赖,但是运行报错 java.lang.ClassNotFoundException
12 1
|
17天前
|
算法 安全 Java
java代码 实现AES_CMAC 算法测试
该代码实现了一个AES-CMAC算法的简单测试,使用Bouncy Castle作为安全提供者。静态变量K定义了固定密钥。`Aes_Cmac`函数接受密钥和消息,返回AES-CMAC生成的MAC值。在`main`方法中,程序对给定的消息进行AES-CMAC加密,然后模拟接收ECU的加密结果并进行比较。如果两者匹配,输出"验证成功",否则输出"验证失败"。辅助方法包括将字节转为16进制字符串和将16进制字符串转为字节。
|
17天前
|
存储 Java 数据库连接
java使用mp持久化框架,写入5000个字符,但是VARCHAR(255) 会报错
使用Java的MyBatis Plus框架时,如果尝试将超过VARCHAR(255)限制的字符串(如5000个字符)存入数据库,会抛出异常。解决方法是将列类型改为TEXT。可通过在实体类属性上添加`@TableField(typeHandler = JdbcType.CLOB)`注解,如`private String content;`,将属性映射到CLOB类型列,以存储更长字符串。
9 0
|
18天前
|
Java 数据安全/隐私保护
java base64 加密 解密
java base64 加密 解密
|
27天前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
33 0