You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AES/GCM/NoPadding加密时抛出GCMParameterSpec相关异常的原因

解决AES/GCM加密时InvalidAlgorithmParameterException的问题

嘿,这个报错确实有点反直觉——毕竟GCMParameterSpec就是专门为AES/GCM模式设计的参数类对吧?出现"GCM can not be used with class javax.crypto.spec.GCMParameterSpec"这个错误,大概率是以下几个原因导致的:

  • JDK版本太旧或存在兼容性bug:早期的JDK版本(比如JDK 7的部分早期更新版)对GCM模式的支持不完善,有些实现会错误地拒绝GCMParameterSpec。如果你的项目还在使用老版本JDK,升级到JDK 8及以上版本基本就能解决这个问题。

  • 安全Provider不兼容:如果你的代码手动指定了加密Provider,或者JRE默认的Provider不是支持GCM的版本(比如某些第三方定制Provider),就可能出现这个错误。可以尝试显式指定官方支持的Provider,比如SunJCE,它对GCM模式的支持是完善的。

  • IV长度不符合规范:虽然错误信息没直接指向,但GCM模式推荐使用12字节(96位)的IV,有些老的Provider会对非标准长度的IV抛出参数错误。如果你的iv变量长度不是12字节,调整一下试试。

修复后的代码示例

// 安全生成12字节的标准GCM IV
byte[] iv = new byte[12];
new SecureRandom().nextBytes(iv);

// 显式指定支持GCM的Provider
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "SunJCE");
GCMParameterSpec parameterSpec = new GCMParameterSpec(128, iv);
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec, parameterSpec);

内容的提问来源于stack exchange,提问作者Surendra Naidu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:52:47