javax.crypto.BadPaddingException: pad block corrupted

张开发
2026/5/4 2:35:50 15 分钟阅读
javax.crypto.BadPaddingException: pad block corrupted
javax.crypto.BadPaddingException: pad block corrupted 异常是在使用 Java 的加密库 javax.crypto 进行加密或解密操作时可能遇到的一个常见错误。这个异常通常表明在解密过程中遇到了问题可能是因为加密数据本身损坏、密钥不正确、或者填充模式不匹配等原因。1、常见原因及解决方法‌错误的密钥‌确保用于解密的密钥与用于加密的密钥完全相同。任何小的偏差比如使用了错误的密钥、密钥长度不匹配或密钥类型不一致都可能导致此异常。Cipher cipher Cipher.getInstance(AES/CBC/PKCS5Padding);SecretKeySpec key new SecretKeySpec(yourSecretKey, AES);cipher.init(Cipher.DECRYPT_MODE, key);‌错误的初始化向量IV‌如果使用的是带初始化向量的加密模式如 CBC 或 CFB确保在解密时使用了与加密时相同的 IV。IvParameterSpec iv new IvParameterSpec(yourInitializationVector);cipher.init(Cipher.DECRYPT_MODE, key, iv);‌错误的填充模式‌确保加密和解密时使用的填充模式相同。例如如果在加密时使用了 PKCS5Padding解密时也必须使用相同的填充模式。Cipher cipher Cipher.getInstance(AES/CBC/PKCS5Padding);‌损坏的数据‌检查传输或存储过程中数据是否被意外修改或损坏。确保在传输或存储过程中数据的安全性。‌不正确的数据格式‌确保加密的数据格式正确例如如果使用了某种编码如 Base64在解密前需要正确解码。byte[] decryptedData cipher.doFinal(Base64.getDecoder().decode(encryptedData));调试步骤‌打印异常堆栈跟踪‌查看异常的具体位置和原因这有助于确定是哪一部分的配置或数据处理出了问题。try {// 加密或解密代码} catch (BadPaddingException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}‌检查所有配置和输入数据‌重新验证所有配置设置包括密钥、IV、算法和模式等。

更多文章