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

解决原文摘自:Java实现AES加密,异常java.security.InvalidKeyException: Illegal key size 的解决_走过的足迹-CSDN博客Java实现AES加密,抛出异常如下:java.security.InvalidKeyException: Illegal key size代码参考 http://my.oschina.net/Jacker/blog/86383?fromerr=x3l5xL1a原因:Illegal key size or default parameters 是指密钥长https://blog.csdn.net/wangjunjun2008/article/details/50847426

Java实现AES加密,抛出异常如下:
java.security.InvalidKeyException: Illegal key size

代码参考 AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】 - 尐桀 - OSCHINA - 中文开源技术交流社区

原因:

Illegal key size or default parameters 是指密钥长度受限制,

java运行时环境读到的是受限的policy文件。

policy文件位于${java_home}/jre/lib/security 目录下。

这种限制是因为美国对软件出口的控制。

解决办法:

去除该限制只需下载 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files,

覆盖上述目录下的对应jar文件(local_policy.jar, US_export_policy.jar)即可。

下载地址:
JDK6 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6
JDK7 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 7 Download
JDK8 JCE Unlimited Strength Jurisdiction Policy Files for JDK/JRE 8 Download
 

下载包的readme.txt 有安装说明,即替换

${jdk_home}/jre/lib/security

${jre_home}/lib/security

目录下的 local_policy.jar 和 US_export_policy.jar 文件。

参考 Java Security: Illegal key size or default parameters? - Stack Overflow

问题描述原文摘自:

AES的256位密钥加解密报 java.security.InvalidKeyException: Illegal key size or default parameters 异常的处理及处理工具_dafeige8的博客-CSDN博客AES的256位密钥加解密报“java.security.InvalidKeyException: Illegal key size or default parameters”异常的处理及处理工具https://blog.csdn.net/dafeige8/article/details/76019911

AES的256位密钥加解密报 java.security.InvalidKeyException: Illegal key size or default parameters 异常的处理及处理工具

-------------

一、出现的现象
为了数据代码在传输过程中的安全,很多时候我们都会将要传输的数据进行加密,然后等对方拿到后再解密使用。我们在使用AES加解密的时候,在遇到128位密钥加解密的时候,没有进行什么特殊处理;然而,在使用256位密钥加解密的时候,如果不进行特殊处理的话,往往会出现报“java.security.InvalidKeyException: Illegal key size or default parameters”的异常,那么这是为什么呢?今天我们来讲一讲。


二、为什么会出现这样的现象
我们做Java开发,或是Android开发,都会先在电脑上安装JDK(Java Development Kit) 并配置环境变量,JDK也就是 Java 语言的软件开发工具包,JDK中包含有JRE(Java Runtime Environment,即:Java运行环境),JRE中包括Java虚拟机(Java Virtual Machine)、Java核心类库和支持文件,而我们今天要说的主角就在Java的核心类库中。在Java的核心类库中有一个JCE(Java Cryptography Extension),JCE是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现,所以这个是实现加密解密的重要类库。

在我们安装的JRE目录下有这样一个文件夹:%JAVE_HOME%\jre\lib\security(%JAVE_HOME%是自己电脑的Java路径,一版默认是:C:\Program Files\Java,具体看自己当时安装JDK和JRE时选择的路径是什么),其中包含有两个.jar文件:“local_policy.jar ”和“US_export_policy.jar”,也就是我们平时说的jar包,再通俗一点说就是Java中包含的类库(Sun公司的程序大牛封装的类库,供使用Java开发的程序员使用),这两个jar包就是我们JCE中的核心类库了。JRE中自带的“local_policy.jar ”和“US_export_policy.jar”是支持128位密钥的加密算法,而当我们要使用256位密钥算法的时候,已经超出它的范围,无法支持,所以才会报:“java.security.InvalidKeyException: Illegal key size or default parameters”的异常。那么我们怎么解决呢?

三、怎么解决这个异常
这个问题oracle公司早就替我们想到了(脑补一下,别懵了:Java是Sun开发的一种编程语言,2009年oracle宣布收购Sun公司,从此两家就是一家了),所以在oracle官网给我们提供有Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files X(即: Java加密扩展(JCE)无限强度权限政策文件),也就是所谓的JCE的无敌加强版,后面的“X”代表的是对应的JDK版本。该文件中只包含了 “local_policy.jar ”和“US_export_policy.jar”这两个jar包,我们只需要拿这两个jar包替换掉自己JRE中的对应jar包就行了。

注意:需要特别注意的一点就是,替换的JCE版本要和自己电脑上的JDK版本一一对应。比如说:自己电脑上安装的是JDK 8,则需要安装与之对应的JCE版本Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8
————————————————
版权声明:本文为CSDN博主「Run-ning」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dafeige8/article/details/76019911

 -- 以下是我解决的, 也简单,就是替换以下。

 

 首先找到自己项目用的jdk ,位置

然后下载对应的jar包

我是把这两个里面的jar包都给替换了 

----------我是出了这个bug 然后去找资料,最后整理了一下放在一起了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442690.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Caused by: org.springframework.boot.web.server.PortInUseException: Port 8081 is already in use 端口占用

Caused by: org.springframework.boot.web.server.PortInUseException: Port 8081 is already in use 解决引用: 在dos下,输入 netstat -ano|findstr 8080 //说明:查看占用8080端口的进程 显示占用端口的进程 taskkill /pid 9476 …

Linux+Docker+腾讯云/阿里云服务器 安装MySQL相关命令整理

注:主要是收集整理一些常用的命令 主要参考:狂神说docker以及其他的一些命令收集。主要是因为平常安装的mysql外部无法访问 MYSQL的创建用户,授权用户,删除用户,查看用户_ZJE-CSDN博客_mysql 显示用户1.查看用户2.创…

list.size为1但是内容为null

又是一件离奇的事被我遇到了,哈哈。测试环境暴露出来的问题。还奇怪了好一会儿。然后查了一下资料。原来很多人都遇到了。大概原因就是 sql语句使用了计算函数sum(),但是where条件出来的数据为空,最后返回到java 映射进list了。 造成了list.size为1但是内…

遍历这些字符串,如果字符串没有包含数字的,就将字符串中的小写字母转成大写字母并打印字符串

package cn.silence;public class StrDemo3 {/*** 有如下字符串:"12ab","java","cd","Server78"* //遍历这些字符串,如果字符串没有包含数字的,就将字符串中的小写字母转成大写字母并打印字符串*/public static…

idea springboot一直卡在启动 没有日志输出

断点从 springApplication.run(args),进入 在 SpringApplication,322行 handleRunFailure(context, ex, exceptionReporters, listeners); 可以看到错误信息。 修改后正常启动

40029错误{“errcode“:40029,“errmsg“:“invalid code, rid: 623bbdcd-3c97f4af-5a2c06d6“}

背景:服务器获取微信小程序openid的时候,报code无效。 但是code是根据开发者文档生成的。服务器配置也没有问题。 因为服务器,wechatAppId 和 wechatSecret不一致,会分别报这两个的错误。 最终检查为,生成code的APP…

CORS error 状态码451

项目背景,测试环境的前端代码,指向本地开发机。访问451 谷歌浏览器 查询错误码猜测,可能是跨域问题。其实具体错误也不是特别清楚。就想着换个浏览器。 换搜狗浏览器。问题解决了。记录一下

javassist将类的类型修改,将接口修改为类

将接口interface 修改为class 接口 接口字节码 修改为class类后的字节码 将接口修改成为了,class类 但是这里还有一个坑,是class 没有默认构造,需要添加一个无参构造,不然不能实例化对象 这是生成构造方法后的字节码,…

根据字节码获取类的绝对路径

适用于当前模块或引入模块。 不适用于第三方jar包 /*** 根据字节码获取类绝对路径** param clazz clazz* return classRealPath*/private static String getClassRealPath(Class<?> clazz) {String classPath clazz.getName().replace(".", "/") …

Javassist给方法添加形参,给方法添加参数

前言&#xff1a; 此次用到的jar包 Javassist 此篇博文不是教大家怎么去了解他&#xff0c;因为我也不是很了解 主要是因为这两天有一个需求是扩展knife4j 需要用到大量反射了解到的。 因为这方面资料太少了。我也是慢慢摸索出来的。把这些发出来吧。 我理解的 Javassist 主…

javassist动态给方法添加注解,动态给形参添加注解,动态给类添加注解

参考文档 这个写的挺全的&#xff0c;就是写的有点丑 javassist教程_不懂人情世故的博客-CSDN博客_java javassist转载 https://www.cnblogs.com/rickiyang/p/11336268.htmljavassist使用全解析Java 字节码以二进制的形式存储在 .class 文件中&#xff0c;每一个 .class 文件包…

解决javassist不能重复加载字节码的问题

因为我的是一个接口&#xff0c;所以麻烦诸多。 事实上在类加载前做好准备工作&#xff0c;不会遇到这个问题&#xff0c;但是我正巧&#xff0c;在使用javassist的时候需要加载类&#xff0c;因为我要读取源码&#xff0c;拿到注释&#xff0c;再通过ssit 修改字节码&#xf…

根据type类型判断是否为基本数据类型,或基本数据类型的包装类,或泛型为基本数据类型

根据type类型判断是否为基本数据类型&#xff0c;或基本数据类型的包装类&#xff0c;或泛型为基本数据类型 /*** 判断是否为基本数据类型&#xff0c;或基本数据类型的包装类&#xff0c;或泛型为基本数据类型* string true* int true* Integer true* String[] true* user[] …

根据参数类型,获取泛型里所有的引用clazz,获取泛型实际参数

/*** 根据参数类型&#xff0c;获取泛型里所有的引用clazz* 列&#xff1a; public List<PageResult<List<User>>> intTest(RequestEntity<Map<String, List<PageResult<User>>>> req)** aClass class org.springframework.http.Re…

根据class判断是否为基本数据类型,或基本数据类型的包装类,或基本类型的数组,不考虑泛型

/*** 判断是否为基本数据类型&#xff0c;或基本数据类型的包装类&#xff0c;不考虑泛型* string true* int true* Integer true* String[] true* user[] false* List<string> false* list<user> false*/private static boolean isPrimitive(Class<?> cl…

反射根据类型,提取引用类型clazz

根据反射&#xff0c;提取引用类型&#xff0c;不包含基本数据类型&#xff0c;以及基本数据类型的包装类&#xff0c;及单列集合&#xff0c;和双列集合 /*** 是否为引用数据类型*/private static boolean isPrimitive(Class<?> clazz) {if (clazz.equals(String.class…

通过反射遍历属性,找出基本数据类型,和自定义引用类,以便生成接口文档时使用

/*** 是否为一个用户标准bean&#xff0c;不考虑泛型情况*/private static boolean isBean(Class<?> clazz) {if (clazz.equals(String.class) || ClassUtil.isBasicType(clazz)) {return false;}if (clazz.isArray() && ClassUtil.isSimpleValueType(clazz.get…

通过反射还原实际参数类型

/*** 根据类型提取所有关联参数*/public static void getAllParameter(Type type, List<Class<?>> list) {Class<?> c1 TypeUtil.getClass(type);if (type instanceof ParameterizedType) {Type[] ts ((ParameterizedType) type).getActualTypeArguments…

通过反射复原完整的src方法名称

/*** 根据方法名&#xff0c;生成完整的方法行** param clazz 字节码* param method java.lang.reflect method* return public static Annotation getAnnotation(Class<?> clazz, ConstPool constPool);*/public static String getSrcMethod(Class<?> clazz, M…

js关闭iframe窗口_[Selenium]24.处理弹窗新式的模态窗口

场景页面上弹出的对话框是自动化测试经常会遇到的一个问题。很多情况下这个弹出的对话框是一个iframe&#xff0c;处理起来有点麻烦&#xff0c;需要进行switch_to操作. 请参考文章测试曾哥&#xff1a;[Selenium]23.对话框的处理​zhuanlan.zhihu.com但现在很多前端框架的对话…