关于 AES256 解密报错 “Illegal key size“ 的分析

报错提示
我有一个代码解密的,在本地环境报错 ,测试环境不报错,为什么呢 ,报错信息如下 ERROR 34168 --- [er-pull-thread2] c.t.o.o.c.c.utils.AES256EncryptionUtils : 解密失败,失败原因:InvalidKeyException: Illegal key size cn.hutool.crypto.CryptoException: InvalidKeyException: Illegal key size at cn.hutool.crypto.symmetric.SymmetricCrypto.encrypt(SymmetricCrypto.java:277) at com.xx.oms.order.core.common.utils.AES256EncryptionUtils.encrypt(AES256EncryptionUtils.java:38)

关于 AES256 解密报错 "Illegal key size" 的分析

这个错误是由于 Java 加密策略限制导致的,具体原因和解决方案如下:

错误原因

InvalidKeyException: Illegal key size 错误表明您的本地 Java 环境缺少对 256 位 AES 加密的支持。这是因为:

  1. Java 默认安装包含的是"有限强度管辖策略文件",它限制了加密密钥的长度

  2. 测试环境可能已经安装了"无限强度管辖策略文件",所以不会报错

解决方案

方法一:安装 JCE 无限强度管辖策略文件(推荐)

  1. 下载 JCE 无限强度管辖策略文件:

  2. 解压下载的文件,你会找到两个 jar 文件:

    • local_policy.jar

    • US_export_policy.jar

  3. 替换你本地 Java 安装目录下的这些文件:

    • 路径通常是 $JAVA_HOME/jre/lib/security/

  4. 重启你的应用程序

方法二:降低加密强度(不推荐)

如果你无法修改 JCE 策略文件,可以改用 AES-128 加密(但安全性降低)

方法三:检查 Java 版本

确保测试环境和本地环境使用相同版本的 Java,因为不同版本的 JCE 策略可能不同

验证

替换文件后,你可以运行以下代码验证是否成功:

java

import javax.crypto.Cipher;

public class CheckCrypto {
    public static void main(String[] args) throws Exception {
        int maxKeyLen = Cipher.getMaxAllowedKeyLength("AES");
        System.out.println("Max AES key length: " + maxKeyLen);
        // 如果输出 2147483647,则表示无限制
    }
}

如果输出 2147483647,则表示无限强度策略已生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值