解决因jdk版本问题不支持aes256加密问题(Illegal key size or default parameters)

「已解决✅」java.security.InvalidKeyException: Illegal key size or default parameters ❌原因:为了数据代码在传输过程中的安全,很多时候我们都会将要传输的数据进行加密,然后等对方拿到后再解密使用。然而,在使用256位密钥加解密的时候,如果不进行特殊处理的话,可能会因为jdk版本的问题出现这个异常java.security.InvalidKeyException: Illegal key size。现在用文本编辑器打开java.security,并找到定义java安全性属性crypto.policy的行,它可以有两个值limited或unlimited - 默认值是limited。 阅读详情

想必大家遇到aes256加密报如下异常:java.security.InvalidKeyException: Illegal key size or default parameters,在网上搜到最多的解决方案是在oracle官网下载补丁jar包(local_policy.jar、US_export_policy.jar),进行替换。
当然,如果这个一个新项目,或者项目规模较小,完全可以通过替换对应jar包,或者升级jdk的版本来解决。但对于一个规模较大,稳定运行的项目,替换jar包可能意味着将系统推向潜在的未知的风险。
下面,通过反射来修改jdk对aes加密可以长度的限制

需要注意的是不同版本的jdk在实现有界限制的代码存在差异

测试jdk版本
此处使用openjdk

D:\test\springWorkspace>java -version
openjdk version "1.8.0_41"
OpenJDK Runtime Environment (build 1.8.0_41-b04)
OpenJDK Client VM (build 25.40-b25, mixed mode)

上实现代码

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.security.NoSuchAlgorithmException;
import java.security.Permission;
import java.security.PermissionCollection;
import java.util.Map;

import javax.crypto.Cipher;

import org.junit.jupiter.api.Test;

/**
 * @author liujun
 * @since 2022/5/17
 */
public class TestAes {

    /**
     * 去除jdk的128位的限制
     */
    public static void removeCryptographyRestrictions() {
        try {
            /*
             * Do the following, but with reflection to bypass access checks:
             * JceSecurity.isRestricted = false;
             * JceSecurity.defaultPolicy.perms.clear();
             * JceSecurity.defaultPolicy.add(CryptoAllPermission.INSTANCE);
             */
            final Class<?> jceSecurity = Class.forName("javax.crypto.JceSecurity");
            final Class<?> cryptoPermissions = Class.forName("javax.crypto.CryptoPermissions");
            final Class<?> cryptoAllPermission = Class.forName("javax.crypto.CryptoAllPermission");

            final Field isRestrictedField = jceSecurity.getDeclaredField("isRestricted");
            isRestrictedField.setAccessible(true);
            // 去除isRestricted的final限制
            final Field modifiersField = Field.class.getDeclaredField("modifiers");
            modifiersField.setAccessible(true);
            modifiersField.setInt(isRestrictedField, isRestrictedField.getModifiers() & ~Modifier.FINAL);
            isRestrictedField.set(null, false);

            final Field defaultPolicyField = jceSecurity.getDeclaredField("defaultPolicy");
            defaultPolicyField.setAccessible(true);
            final PermissionCollection defaultPolicy = (PermissionCollection) defaultPolicyField.get(null);

            final Field perms = cryptoPermissions.getDeclaredField("perms");
            perms.setAccessible(true);
            ((Map<?, ?>) perms.get(defaultPolicy)).clear();

            final Field instance = cryptoAllPermission.getDeclaredField("INSTANCE");
            instance.setAccessible(true);
            defaultPolicy.add((Permission) instance.get(null));

        } catch (final Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testGetLength() throws NoSuchAlgorithmException {
        long length = Cipher.getMaxAllowedKeyLength("AES");
        System.out.println("before:" + length);

        removeCryptographyRestrictions();

        length = Cipher.getMaxAllowedKeyLength("AES");
        System.out.println("after:" + length);
    }

}

输出

before:128
after:2147483647

需要注意的点
对于部分jdk版本"javax.crypto.JceSecurity"下的isRestricted是非final限制的,所以不需要额外处理去除final限制的代码。

参考文档:
https://stackoverflow.com/questions/1179672/how-to-avoid-installing-unlimited-strength-jce-policy-files-when-deploying-an
————————————————
原文链接:https://blog.youkuaiyun.com/weixin_39265427/article/details/106505502

解决Java AES-256加密报错InvalidKeyException的四种方案 在Java应用开发中,数据加密是保障信息安全的核心环节,AES算法因其高效与安全性被广泛采用。其原理基于对称加密,通过分组密码模式对数据进行混淆与扩散。然而,Java的默认安全策略因历史出口管制法规,对加密强度进行了限制,导致使用AES-256等高强度加密时,常抛出`InvalidKeyException: Illegal key size`异常,这直接影响了涉及支付、敏感信息存储等高安全需求场景的实现。本文聚焦于这一经典问题,深入剖析其根源在于JCE管辖策略文件,并系统性地提供了四种实战解决方案:替换策略 阅读详情

相关推荐

Java AES/CBC解密实战:BouncyCastle版本选择与Linux部署全解析

AES(高级加密标准)是一种广泛使用的对称加密算法,其CBC(密码分组链接)模式通过引入初始化向量(IV)来增强安全性,确保相同明文在不同上下文中产生不同密文。在Java生态中,JCE(Java密码学扩展)提供了基础实现,但在处理PKCS7填充等特定场景时存在局限,这时就需要引入强大的第三方密码学库BouncyCastle(BC)。BC库通过实现JCE的SPI(服务提供者接口),为Java应用提供了更丰富的算法支持和更好的兼容性,尤其在对接遗留系统或特定硬件时价值显著。在实际工程中,开发人员常面临BC版本选

weixin_34161032的博客 382

报错记录:AES加密报错:Illegal key size or default parameters解决方案

报错记录:AES加密报错:Illegal key size or default parameters解决方案

我认不到你的博客 3766

Java Cipher 常见误区排查:3类 IllegalBlockSizeException 报错根因与修复

本文深入解析Java Cipher中常见的3类IllegalBlockSizeException异常,包括RSA加密数据超长、AES块大小不匹配和密钥长度不匹配问题。通过具体代码示例和解决方案,帮助开发者快速定位和修复加密解密过程中的常见错误,提升Java加密开发的效率和安全性。

weixin_33951761的博客 391

java.security.invalidkeyexception: illegal key size or default parameters

解决原文摘自:Java实现AES加密,异常java.security.InvalidKeyException: Illegal key size 的解决_走过的足迹-优快云博客Java实现AES加密,抛出异常如下:java.security.InvalidKeyException: Illegal key size代码参考http://my.oschina.net/Jacker/blog/86383?fromerr=x3l5xL1a原因:Illegal key size or default param.

qq_42553504的博客 5889

Java加密开发中InvalidKeyException的5大雷区与避坑指南

在Java加密开发中,密钥处理是保障数据安全的核心环节。其原理涉及密钥的生成、存储、传输与使用,任何环节的疏漏都可能导致加密操作失败。从技术价值看,正确的密钥管理不仅能确保加密功能的正常运行,更是构建安全系统的基石。在实际应用场景中,开发者常因JCE策略文件缺失、密钥格式混淆、算法参数不匹配等问题遭遇InvalidKeyException,尤其是在对接支付接口、实现文件安全存储或处理用户敏感信息时。本文聚焦Java加密实战,系统梳理了密钥长度限制、格式解析、算法匹配等常见陷阱,并提供了可直接落地的解决方案,

weixin_30363981的博客 360

Java:解决JDK 8不支持AES 256的问题

解决AES 256java不支持的方法 替换jar包到 jre\lib\security 目录

Illegal key size or default parameters问题解决

这个错误,常出现在,是因为当前的 Java 环境(比如 AES-256),因为默认 JDK 出于政策限制(如美国出口限制)默认只支持。

weixin_46739493的博客 1175

AES192、256位加密解密,jce7,jce8 jdk1.7,jdk1.8

用于替换jdk里的两个jar,解决无法使用AES192、256位加密解密的问题 jce7,jce8

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

报错堆栈如下: Caused by: java.security.InvalidKeyException: Illegal key size or default parameters     at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]     at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]

JasonYao的程序猿路 1万+

AVL(Athena Vortex Lattice)如何编写与应用(一)

前两个是弦向的涡个数和以cos函数分布的间距参数(设为1即可)后两个可以在这里声明也可以写到后面的每一个section中,是展向的涡个数和以sin函数分布的间距参数。这个文件是用来建立飞机模型的文件,是一定要有的文件,其他的.run和.mass并不是必须要有的,甚至mass文件并没有看到有人在使用。Sref、Cref、Bref是飞机的参考面积参考弦长和参考的展长,我的理解就是所设计飞机的S,c,b这三个参数。———————————————以上是飞机的基本信息———————————————

dawangaa的博客 1509

DNN加速器脉动阵列轻量级瞬时故障检测

本文系统综述了面向深度神经网络(DNN)脉动阵列加速器的轻量级瞬时故障检测技术。通过分析比较算法级校验(ABFT)、数值异常监测(剪裁、中值滤波等)、硬件编码检错(AN码、剩余码)以及选择性冗余等方案,指出这些方法能以5%-10%的开销实现对权重和激活比特翻转的高效检测,远低于传统ECC/冗余计算的成本。研究显示,结合多种轻量技术可构建多层防护体系,在保障推理可靠性的同时保持加速器的高性能特性。该成果为安全关键领域的DNN加速器设计提供了重要参考。

欢迎交流! 1073

彻底解决Java JCE加密限制:Illegal key size异常分析与实战方案

Java加密体系(JCE)是Java平台进行加密、密钥生成和协议实现的核心框架。其设计初衷是为了提供可插拔的服务提供者架构,但历史上因出口管制政策,默认的管辖权策略文件对加密强度施加了限制,导致AES-256等高强度算法无法直接使用。这一限制在金融支付、安全通信等需要高强度加密的业务场景中,会引发Illegal key size异常,阻碍系统正常运行。理解JCE策略文件的加载机制与替换原理,是解决该问题的关键。本文针对JDK 1.8等历史版本,系统梳理了从替换策略文件、设置JVM参数到集成BouncyCas

weixin_30666401的博客 480

全面分析总结解决Could not transfer artifact org.apache.maven.plugins等此类问题的方法

全面分析总结解决Could not transfer artifact org.apache.maven.plugins,Could not transfer artifact xxx from/to xxx等此类问题的方法

ccjjjjdff的博客 1万+

AES 加密256位 错误 java.security.InvalidKeyException: Illegal key size or default parameters

Java发布的运行环境包中的加解密有一定的限制。比如默认不允许256位密钥的AES加解密,解决方法就是修改策略文件。 官方网站提供了JCE无限制权限策略文件的下载: JDK8的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.htmlJDK7的下载地址:http://...

weixin_30387663的博客 249

【立创开源】太阳能板充电方案单节3.7v锂电池充电

一直对太阳能板感兴趣,老是感觉充电好麻烦,要是放在那里就可以自己充电多好,所以尝试做了一个太阳能充电板。因为这几天都是阴天,所以测试效果不太好,但是下雨天也是能充电的,但是基本只能维持电量不掉,电压差不多4.2v以上,电流只有2mA。中午出太阳的时候,隔着玻璃放在太阳下测试,电流有12mA以上。能充起一点点电。等大晴天看一看能不能达到卖家说50mA。┗( T﹏T )┛感觉达不到。这个东西只能当一个玩具(;′⌒`)。不过如果汽车上一些行车记录仪加一个这个,汽车经常在太阳下停车,可能再也不用充电了。

贾saisai的博客 1万+

window下移动设备/硬盘报错位置不可用

移动硬盘指示灯亮,但电脑上不显示 报错信息 : 无法访问E:\。参数错误。 报错原因: 移动硬盘打不开提示参数错误,是因为这个H盘的文件系统内部结构损坏导致的。要怎么恢复里面的数据呢? https://jingyan.baidu.com/article/cb5d6105a80242005c2fe0c3.html 解决办法 : 不用格式化修复方法 方法一: 1、单击–开始–运行–输入cmd; 2、...

qq_40907977的博客 4928

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

报错信息:Causedby:java.security.InvalidKeyException:Illegalkey size or defaultparameters问题原因:Java几乎各种常用加密算法都能找到对应的实现。因为美国的出口限制,Sun通过权限文件(local_policy.jar、US_export_policy.jar)做了相应限制。因此存在一些问题:●密钥长度上不能满足需求(...

weixin_36462387的博客 382

AI应用架构师进阶:智能控制系统架构的多Agent设计

本文将从“AI应用架构师”的视角,系统讲解智能控制系统中多Agent架构的设计方法。理解多Agent系统的核心特性与在智能控制场景中的优势;掌握多Agent架构的设计流程:从需求分析到角色划分、通信设计、决策实现;通过实战案例(智能家居控制场景),手把手带你落地一个多Agent智能控制系统;探讨进阶话题:动态Agent组织、安全性设计、与大语言模型(LLM)的融合等。在多Agent系统中,Agent(智能体)是具备自主决策能力的最小执行单元。

小程序开发 1085

加密算法笔记(哈希算法、base64,md5,aes,rsa等)、签名校验、bcrypt、数字信封

加密算法笔记(哈希算法、base64,md5,aes,rsa等)、签名校验、bcrypt

enthan809882的博客 3046

探索激光焊接光束质量诊断系统:原理、应用与前沿

激光焊接光束质量诊断系统是一套专门用于精确评估和监测激光焊接过程中光束特性的精密设备。它宛如一个精密的 “光束医生”,能够全方位地对激光光束进行 “体检”,为焊接工艺提供关键的数据支持。探测器:作为系统的 “感知触角”,探测器负责捕捉激光光束的各种信息,其性能直接影响着诊断的准确性。例如,常见的 CCD(电荷耦合器件)探测器和 CMOS(互补金属氧化物半导体)探测器,它们能够将光信号转化为电信号,具有高灵敏度、高分辨率等特点,可精确探测光束的强度分布、光斑位置等参数。光学透镜。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2582

电子凸轮追剪算法深度解析:2500字图解+代码实战

工艺需求:在物料连续运动过程中完成精准切割核心矛盾:切割瞬间刀具与物料必须绝对同步传统方案:机械凸轮(结构复杂,调整困难)现代方案:电子凸轮(柔性可调,精度更高)

QQ_778132974的博客 1109

AES加密时抛出 java.security.InvalidKeyException:Illegal key size or default parameters 解决办法

使用AES加密时,当密钥大于128时,代码会抛出java.security.InvalidKeyException: Illegal key size or default parameters Illegal key size or default parameters是指密钥长度是受限制的,java运行时环境读到的是受限的policy文件。文件位于${java_home}/jre/lib

coates 1736

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【JAVA使用Aes加密报错:Illegal key size or default parameters,如何解决?】

遇到“Illegal key size or default parameters”这个错误通常与Java环境中使用的加密算法有关,特别是当你尝试使用较高级别的加密密钥长度(例如AES-256)时。这个问题的根本原因通常是由于Java运行时环境(JRE)默认的安全策略文件限制了加密强度,这主要是出于出口控制法规的历史原因。这个报错是由于JDK1.8的版本导致的。网上提供的方法都是通过升级版本,或者修改对应的包来实现加密,如果不想升级JDK1.8版本,那么怎么解决这个问题呢?

江河键行的博客 2589

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

AES对称加密算法 java.security.InvalidKeyException: Illegal key size or default parameters

AES加密算法 AES(Advanced Encryption Standard)是一种对称加密算法(也叫共享密钥),对称加密算法的意思是加密和解密都是用同一个密钥(密钥和秘钥是同义词),它用来代替DES(Data Encryption Standard,56位密钥)。AES有三个关键点:密钥、填充、模式。。 密钥 密钥分为128位(16字节)、192位(24字节)、256位(32字节),位数越多,解密和加密的运算量越大,相应的越安全,可以折中使用192位兼顾效率和安全。 填充 填充,在加密时

wangjun5159的专栏 5865

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

上一篇: 避免递归查询的树形结构的表设计与实现
下一篇: linux RabbitMQ-3.8.5 安装
null_null_bug
博客等级 码龄7年 72粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值