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

Android AES解密返回特殊字符问题V2.0

解决AES解密异常的分步排查方案

咱们先拆解你遇到的问题核心:你手里的加密串和密钥都是Base64编码格式,解密前必须先做解码操作,另外AES解密的关键参数(加密模式、填充方式、IV向量)缺失,这大概率是你抛出异常的主要原因。我一步步帮你梳理排查:

1. 先处理Base64解码(基础前提)

你的密钥ZzRtNDNuY3J5cHRrM3kuLi4=和加密串RnLObq9hdUDGp9S2pxC1qjQXekuf9g6i/5bQfKilYn4=都是Base64编码的,必须先解码成原始字节数组才能用于AES操作。

给你一个Java环境下的解码示例:

// 解码256位AES密钥
byte[] keyBytes = Base64.decode(AesKey256, Base64.DEFAULT);
// 解码读取到的加密内容
byte[] encryptedBytes = Base64.decode(res.getContents(), Base64.DEFAULT);

这里要重点验证:解码后的密钥字节长度必须是32字节(因为是AES-256),如果长度不对,说明密钥的Base64编码或者原始密钥本身有问题,直接会导致解密失败。

2. 确认AES加密参数(核心关键!)

AES解密必须和加密时使用的**模式(Mode)、填充方式(Padding)、IV向量(如果是CBC/GCM等模式)**完全一致,否则必然抛出异常。你目前没提供这些信息,这是最常见的解密失败诱因。

常见的合规加密组合有:

  • AES/CBC/PKCS5Padding:需要16字节的IV向量,通常加密方会把IV和加密串一起返回(比如拼接在加密串前或者单独传递)
  • AES/GCM/NoPadding:需要IV和认证标签,是更安全的现代加密方案
  • AES/ECB/PKCS5Padding:不需要IV,但ECB模式存在安全漏洞,不推荐使用

务必和加密方确认完整的加密方案细节,这一步不能省略。

3. 参考解密代码框架(以CBC模式为例)

假设加密方使用的是AES-256-CBC + PKCS5Padding,且提供了Base64编码的IV向量,这里给你一个可参考的代码模板:

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import android.util.Base64;

public String decryptAESContent(String encryptedStr, String keyBase64, String ivBase64) throws Exception {
    // 解码密钥、加密串、IV
    byte[] keyBytes = Base64.decode(keyBase64, Base64.DEFAULT);
    byte[] encryptedBytes = Base64.decode(encryptedStr, Base64.DEFAULT);
    byte[] ivBytes = Base64.decode(ivBase64, Base64.DEFAULT);

    // 构建密钥和IV规格
    SecretKeySpec secretKey = new SecretKeySpec(keyBytes, "AES");
    IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);

    // 初始化解密Cipher
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec);

    // 解密并转UTF-8字符串
    byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
    return new String(decryptedBytes, "UTF-8");
}

4. 常见异常的排查方向

  • BadPaddingException:大概率是填充方式不匹配,或者密钥/IV错误,也可能是加密串被篡改
  • InvalidKeyException:密钥长度不符合要求(比如AES-256需要32字节),或者设备未开启AES-256支持(Android部分设备需要额外配置)
  • IllegalBlockSizeException:加密串解码后的字节长度不是16字节(AES块大小)的整数倍,可能是Base64解码错误或加密参数不匹配

5. 额外建议

  • 先打印解码后的密钥字节长度、加密串字节长度,确认基础数据没有问题
  • 检查res.getContents()读取的加密串是否完整,有没有被截断或编码错误
  • 优先和加密方同步加密方案的所有细节,不要自行猜测参数

内容的提问来源于stack exchange,提问作者Emilio Calderon Vergara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:34:39