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

Java7调用AES/GCM/NoPadding解密报NoSuchAlgorithmException错误

问题解决方法
  • 核心根因1:你使用的BouncyCastle依赖版本与Java 7不兼容。当前引入的bcprov-jdk15to18-169.jar是适配JDK 15到JDK 18的版本,无法在Java 7环境下正常加载GCM算法实现,这是报错的最主要原因。
  • 核心根因2:同时引入了bcprov和bcprov-ext两个同类型依赖,容易出现类冲突,导致算法实现加载失败。
  • 核心根因3:GCM模式在旧版本BouncyCastle中不支持IvParameterSpec作为参数,需要使用专门的GCMParameterSpec类指定认证标签长度。

具体解决步骤

  1. 替换BouncyCastle依赖:移除现有的两个bcprov包,换成适配Java 7的bcprov-jdk15on系列版本,推荐使用1.69或1.70版本,该系列兼容JDK 1.5到JDK 1.8。
  2. 清理重复依赖:只保留单个bcprov-jdk15on包即可,不需要同时引入ext版本。
  3. 修改解密参数构造逻辑:将原有的IvParameterSpec替换为GCMParameterSpec,指定GCM认证标签长度为128位(行业通用值),同时确保你的IV总长度为12字节(GCM官方推荐的IV长度,可避免额外安全风险)。
  4. (可选)如果动态注册Provider失效,可以改为静态注册:打开JDK安装目录下的jre/lib/security/java.security文件,在provider配置列表末尾添加一行security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider,数字10可根据你现有provider的顺序调整。

修改后的参考代码如下:

public static byte[] decryptRes(final byte[] sessionKey, final String symetricKeyAlg,
        final String pkiProvider, final String encXML, final String msgRefNo)
        throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException,
        BadPaddingException, NoSuchProviderException, InvalidAlgorithmParameterException {
    Security.addProvider(new BouncyCastleProvider());
    final StringBuilder strBuilder = new StringBuilder(msgRefNo);
    strBuilder.append("0000");
    // 显式指定字符集,避免不同环境默认字符集差异导致IV错误
    byte[] iv = strBuilder.toString().getBytes(StandardCharsets.UTF_8);
    final SecretKeySpec symmKeySpec = new SecretKeySpec(sessionKey, "AES");
    final Cipher symmCipher = Cipher.getInstance("AES/GCM/NoPadding", "BC");
    // 替换为GCMParameterSpec,指定128位认证标签长度
    symmCipher.init(Cipher.DECRYPT_MODE, symmKeySpec, new GCMParameterSpec(128, iv));
    final byte[] xmlData = symmCipher.doFinal(base64Decode(encXML));
    return xmlData;
}

内容的提问来源于stack exchange,提问作者Pratyusha Vemulapalli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:24:01