【开发笔记】Java 中 AES 加密时报错:Illegal key size or default parameters

在Java中进行AES加密操作时遇到错误提示:Illegal key size or default parameters。这是由于美国出口限制导致的,Sun在local_policy.jar和US_export_policy.jar文件中设置了密钥长度限制。为了解决这个问题,可以下载Oracle官方的无限制权限文件,替换原有的jar文件,从而支持更大长度的密钥。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java中使用AES对称加密后,请求报错:

Caused by: java.lang.RuntimeException: java.security.InvalidKeyException: Illegal key size or default parameters
        at com.btzh.util.AESUtil.encrypt(AESUtil.java:18)
        at com.btzh.service.impl.SiThirdSystemServiceImpl.mapSystemParams(SiThirdSystemServiceImpl.java:32)
        at com.btzh.resource.SiThirdSystemResource.mapSystemParams(SiThirdSystemResource.java:41)
        ... 43 common frames omitted
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.btzh.util.AESUtil.encrypt(AESUtil.java:15)

原因是美国的

### 解决 Java `InvalidKeyException`: "Illegal key size or default parameters" 错误 当遇到`java.security.InvalidKeyException: Illegal key size or default parameters`错误,通常是因为使用的密钥长度超过了默认策略文件允许的最大值[^1]。 #### 密钥大小限制的原因 Java 加密扩展 (JCE) 默认安装的安全策略文件只支持有限强度的加密算法。对于 AES 来说,默认情况下仅支持最大到 128 位的密钥长度。如果尝试使用更长的密钥,则会触发上述异常[^2]。 #### 安装无限制权限策略文件 要解决这个问题,可以下载并替换 JRE 中的标准本地政策 jar 文件为不受限版本: - 访问 Oracle 官方网站获取适用于当前 JDK 版本的 **Unlimited Strength Jurisdiction Policy Files** - 将下载得到的两个 jar 文件覆盖至 `$JAVA_HOME/jre/lib/security` 目录下相应位置[^3] 完成此操作之后重启应用程序应该能够正常使用较大尺寸的密钥而不再抛出该异常。 #### 验证解决方案的有效性 可以通过编写简单的测试程序来验证问题是否已经解决: ```java import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; public class TestAES { public static void main(String[] args)throws Exception{ KeyGenerator kg = KeyGenerator.getInstance("AES"); kg.init(256); // 使用256位密钥 SecretKey sk = kg.generateKey(); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE,sk); System.out.println("Test passed!"); } } ``` 成功运行这段代码意味着现在可以在项目里安全地采用更高强度的加密方式了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值