全部
常见问题
产品动态
精选推荐

AES加密报错:Illegal key size or default parameters

管理 管理 编辑 删除
最近在使用AES方式进行加密,本来经果测试已经没有问题,但是在更新了密钥key之后,就出现了下列报错。

控制台报错如下:

Exception in thread "main" java.lang.RuntimeException: Illegal key size or default parameters
	at com.cupdata.oam.cardapply.kit.AesKit.decrypt(AesKit.java:98)
	at com.cupdata.oam.cardapply.kit.AesKit.decrypt(AesKit.java:86)
	at com.cupdata.oam.cardapply.kit.AesKit.decryptToStr(AesKit.java:56)
	at com.cupdata.oam.cardapply.kit.AesKit.main(AesKit.java:194)
Caused by: java.security.InvalidKeyException: Illegal key size or default parameters
	at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1026)
	at javax.crypto.Cipher.implInit(Cipher.java:801)
	at javax.crypto.Cipher.chooseProvider(Cipher.java:864)
	at javax.crypto.Cipher.init(Cipher.java:1249)
	at javax.crypto.Cipher.init(Cipher.java:1186)
	at com.cupdata.oam.cardapply.kit.AesKit.decrypt(AesKit.java:94)
	... 3 more

网上搜索发现,由于key的变更(由原来的128位变更为256位),导致加密/解密的失败。
原来的密钥:
lNQqkL1BfSwt2MKw

新的密钥: P_e-BhqDPP0yeMe8Ma43ZhhL6fqevuR8

之所以会出现这种问题,我们就要了解一个新的东西——JCE。在Java的核心类库中有一个JCE(Java Cryptography Extension),JCE是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现,所以这个是实现加密解密的重要类库。

之所以会出现上述的报错问题:是因为AES在进行加密处理的时候并没有经果特殊的处理,但是在使用256位密钥加解密的时候,如果不进行特殊处理的话,往往会出现报“java.security.InvalidKeyException: Illegal key size or default parameters”的异常。

问题解决

通过上面描述,我们知道了问题的所在,下面开始解决。我们要做的就是更换JCE的库,该文件位置在你的JDK/jre/lib/security 目录下面,该目录下我们可以看到两个jar包:local_policy.jar,US_export_policy.jar,这两个jar包是jdk自带的。我们需要下载支持256位密钥加密的jar包。

ca88d202303101506066039.png


备注:一定要下载与自己JDK版本一致的JCE,否则无效。

JDK8:

其对应的JCE下载地址为:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

下载完后,解压,将其中的“local_policy.jar ”和“US_export_policy.jar”两个文件替换掉自己%JAVE_HOME%\jre\lib\security文件夹下对应的原文件(%JAVE_HOME%是自己电脑的Java路径)。

JDK7:

其对应的JCE下载地址为:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

下载完后,解压,将其中的“local_policy.jar ”和“US_export_policy.jar”两个文件替换掉自己%JAVE_HOME%\jre\lib\security文件夹下对应的原文件(%JAVE_HOME%是自己电脑的Java路径)。

JDK6:

其对应的JCE下载地址为:http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

下载完后,解压,将其中的“local_policy.jar ”和“US_export_policy.jar”两个文件替换掉自己%JAVE_HOME%\jre\lib\security文件夹下对应的原文件(%JAVE_HOME%是自己电脑的Java路径)。

JDK5:

其对应的JCE下载地址为:http://download.csdn.net/detail/scs2043/4237335

下载完后,解压,将其中的“local_policy.jar ”和“US_export_policy.jar”两个文件替换掉自己%JAVE_HOME%\jre\lib\security文件夹下对应的原文件(%JAVE_HOME%是自己电脑的Java路径)。

扩展:
真实项目开发肯定在Linux中,前面我们知道Windos下更换JCE的方法,那么的Linux中怎么更换?如果你以为一样去替换jar包,那就大错特错了,因为JDK1.8以上的该目录下压根没有这两个JAR包。(如果真有,就直接替换)

3557d202303101508121502.png

针对这种情况,我们的解决方式为:vim 命令打开java.security文件,将注释掉的 #crypto.policy=unlimited 打开,然后保存即可







请登录后查看

CRMEB-慕白寒窗雪 最后编辑于2023-03-10 15:09:00

快捷回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
回复从新到旧

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest==1? '取消推荐': '推荐'}}
{{item.floor}}#
{{item.user_info.title}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
{{item.like_count}}
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

作者 管理员 企业

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}   {{itemc.ip_address}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
查看更多
回复
回复
1623
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

CRMEB-慕白寒窗雪 作者
社区运营专员---高冷のBoy | 呆萌のGirl

回答

2220

发布

1777

经验

45153

快速安全登录

使用微信扫码登录
{{item.label}} {{item.label}} {{item.label}} 板块推荐 常见问题 产品动态 精选推荐 首页头条 首页动态 首页推荐
加精
取 消 确 定
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

CRMEB开源商城下载 开源下载 CRMEB官方论坛 帮助文档
返回顶部 返回顶部
CRMEB客服