【Java】# 256位密钥加密错误,java.security.InvalidKeyException:Illegal key size错误

背景:在使用 SHA256withRSA算法进行加密时,报java.security.InvalidKeyException: Illegal key size错误,而本地开发时没有问题

解决方式

  • 进入到 JDK的安装目录下,再进入 /jre/lib/security 目录,看该目录下是有一个 policy 文件夹,还是有两个jar包:local_policy.jar,US_export_policy.jar

  • 第一种情况:有 policy文件夹(说明此版本为 JVM启用 无限制强度管辖策略)

    • 在当前文件夹中,找到 java.security 文件

    • 使用文本编辑器打开后,找到 crypto.policy 属性(默认应该是被注释的),它可以有两个值:limited(默认)和unlimited

      #crypto.policy=unlimited
      
    • 取消注释(删除 # ),以此来启用无限制

      crypto.policy=unlimited
      
  • 第二种情况:有 local_policy.jar和 US_export_policy.jar 两个jar包,没有 policy文件夹

    • 去官网下载 JCE无限制权限策略文件

      -- JDK5
      http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-plat-419418.html#jce_policy-1.5.0-oth-JPR
      
      -- JDK6
      http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html
      
      -- 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 三个文件

    • 将这两个jar放到 %JAVE_HOME%\jre\lib\security 目录下覆盖原来文件

错误原因:对数据进行加密时,如果是 128位密钥加解密,那无需做什么特殊处理;但是如果使用 256位密钥进行加解密时,如果不进行特殊处理,可能会因为 JDK版本的问题出现 java.security.InvalidKeyException: Illegal key size 这个异常

原理

  • Java程序的开发与运行离不开 JDK(Java Development Kit)的支持,JDK中包含了 JRE(Java Runtime Environment,Java运行环境),而 JRE中又包含了 JVM(Java Virtual Machine,Java虚拟机)、Java核心类库以及支持文件。
  • 和加解密相关的内容就在Java的核心类库中,有一个JCE(Java Cryptography Extension),它是一组包,主要提供用于加密、密钥生成和协商以及MAC(Message Authentication Code)算法的框架及实现
  • 而在JCE中,还有两个核心的类库就是 local_policy.jar 以及 US_export_policy文件(在 JDK安装目录\jre\lib\security 下),它们支持 128位密钥的加密算法,而当我们要使用 256位密钥算法时,超出了它们的支持范围,所以就报 “java.security.InvalidKeyException: Illegal key size or default parameters” 异常了
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LRcoding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值