Java AES解密抛出Exception decrypting with padded cipher异常
异常产生原因
抛出BadPaddingException: Exception decrypting with padded cipher的核心原因是密文输入处理逻辑错误,和密钥生成逻辑无关:
- 你代码中
key变量存储的是经过Base64编码的AES密文字符串,解密前没有做Base64解码,直接调用key.getBytes(StandardCharsets.UTF_8)拿到的是Base64字符串本身的UTF-8编码字节,并非AES加密输出的原始二进制密文。 - 错误的字节输入不符合AES/ECB/PKCS5Padding的块解密要求,解密过程中PKCS5填充位校验完全不匹配,直接抛出填充解密异常。
- 你的密钥生成逻辑是正确的:对字符串
MiClave做SHA-256哈希取32字节结果作为256位AES密钥的实现没有问题,不存在密钥不匹配的问题。
修复方案
- 解密前先对
key存储的Base64密文做解码,拿到原始二进制密文再传入解密方法 - 解密得到的明文字节直接转UTF-8字符串输出即可,不需要额外做Base64编码
修复后的完整可运行代码如下:
import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.Base64; public class gtUF2 { public static void main(String[] args) throws NoSuchPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException { Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); SecretKey sKey = passwordGeneration("MiClave", 256); // 打印生成的AES密钥Base64值,可用于校验 System.out.println("AES Key(Base64): " + Base64.getEncoder().encodeToString(sKey.getEncoded())); String cipherTextBase64 = "7JUQgSTY3kFSYQC6/0L89rdYW36ArmK75Kdn3+cOvaE="; cipher.init(Cipher.DECRYPT_MODE, sKey); // 修复点:先Base64解码得到原始密文字节,再执行解密 byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(cipherTextBase64)); // 修复点:解密得到的明文字节直接转UTF-8字符串输出 System.out.println("Decrypted plaintext: " + new String(decrypted, StandardCharsets.UTF_8)); } public static SecretKey passwordGeneration(String text, int keySize) throws NoSuchAlgorithmException { byte[] data = text.getBytes(StandardCharsets.UTF_8); MessageDigest md = MessageDigest.getInstance("SHA-256"); byte[] hash = md.digest(data); byte[] key = Arrays.copyOf(hash, keySize/8); return new SecretKeySpec(key, "AES"); } }
补充说明:如果使用JDK 8u161之前的旧版本运行AES-256加解密,需要提前安装JCE无限制权限策略文件,新版本JDK默认开启256位密钥加解密权限,无需额外配置。
内容的提问来源于stack exchange,提问作者Norhther
相关产品推荐
相关产品推荐

