Java AES/CBC/PKCS5Padding 解密代码示例及常见错误解决
Java AES/CBC/PKCS5Padding 解密代码示例及常见错误解决
本文提供 Java AES/CBC/PKCS5Padding 解密代码示例,并分析常见的错误,例如 IV 长度不正确错误。详细介绍错误的原因和解决方法,帮助读者快速解决问题。
代码示例
private static final String ALGORITHM = 'AES/CBC/PKCS5Padding';
private static final String SECRET_KEY = 'td9cp650O9TkwU201mO5/Rr3V7DutmKZ';
private static final String IV = '0123456789abcdef';
public static String decryptAES(String ciphertext) throws Exception {
// 将密文转换为字节数组
byte[] ciphertextBytes = hexStringToByteArray(ciphertext);
// 使用 Base64 解码密文
byte[] encryptedBytes = Base64.getMimeDecoder().decode(ciphertextBytes);
// 使用 AES/CBC/PKCS5Padding 模式进行解密
Cipher cipher = Cipher.getInstance(ALGORITHM);
// 创建 AES 密钥规格
SecretKeySpec secretKeySpec = new SecretKeySpec(hexStringToByteArray(SECRET_KEY), 'AES');
// 创建 IV 参数规格
IvParameterSpec ivParameterSpec = new IvParameterSpec(hexStringToByteArray(IV));
// 初始化解密器
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
// 执行解密操作
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
// 将解密后的字节数组转换为字符串
return new String(decryptedBytes, StandardCharsets.UTF_8);
}
/**
* @Description: 将十六进制字符串转换为字节数组
* @param hexString 需要转换的数据
* @Return: byte[] 返回字节数组
* @Author: Lucky
* @Date: 2023-07-13
* @Time 11:41
**/
public static byte[] hexStringToByteArray(String hexString) {
int len = hexString.length();
byte[] byteArray = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
byteArray[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4)
+ Character.digit(hexString.charAt(i + 1), 16));
}
return byteArray;
}
常见错误及解决方法
错误: Wrong IV length: must be 16 bytes long
原因: 该错误是因为 IV 参数的长度不正确。根据代码中定义的 IV 变量,其长度为 16 个字符,而 IV 参数的长度应该是 16 字节(即 128 位)。
解决方法:
- 检查 IV 参数的长度是否正确: 确保其长度为 16 字节。
- 确保 IV 参数的值是十六进制字符串: 可以使用
hexStringToByteArray()方法将十六进制字符串转换为字节数组。 - 如果 IV 参数是从其他地方获取的,可以尝试使用其他方式获取正确的 IV 值。
如果以上步骤都无法解决问题,可以考虑检查密钥和其他加密参数是否正确,并确保使用的加密算法与加密数据一致。
总结
本文提供了 Java AES/CBC/PKCS5Padding 解密代码示例,并分析了常见的错误,例如 IV 长度不正确错误。希望本文能够帮助读者快速解决问题,并更好地理解 Java AES/CBC/PKCS5Padding 解密机制。
原文地址: https://www.cveoy.top/t/topic/pKpq 著作权归作者所有。请勿转载和采集!