关于AES加解密java.security.InvalidKeyException的错误解决方法

最近springboot做项目时,在window上启动 调用服务没有问题,可是部署在linux后服务之间调用却出现了问题

debug看报错信息,刚开始看到的报错的信息

报的是javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher

以为是公司框架的AES加密解密方法的问题,一直修改调试,可是一直解决不了

后来仔细看debug发现有一个错误被捕获了没细看

报错信息是

org.springframework.http.converter.HttpMessageNotReadableException: I/O error while reading input message; nested exception is java.io.IOException: java.lang.IllegalStateException: java.security.InvalidKeyException: No installedprovider supports this key: javax.crypto.spec.SecretKeySpec

这应该就是错误的根源了,经过大量的资料查询(google 百度)发现了java.security.InvalidKeyException: Illegal key size 异常. 因为密钥长度是受限制的, java运行时环境读到的是受限的policy文件. 文件位于${java_home}/jre/lib/security, 这种限制是因为美国对软件出口的控制.
 

处理方法: 在Java Oracle官方网站下载JCE无限制权限策略文件

JDK7的下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
JDK8的下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html 
下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt
如果安装了JRE,将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件
如果安装了JDK,还要将两个jar文件也放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件

个人来说,我感觉这算是java开发中的一个大坑,在加密解密中应该会经常遇到所以特意记录一下

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值