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 位)。

解决方法:

  1. 检查 IV 参数的长度是否正确: 确保其长度为 16 字节。
  2. 确保 IV 参数的值是十六进制字符串: 可以使用 hexStringToByteArray() 方法将十六进制字符串转换为字节数组。
  3. 如果 IV 参数是从其他地方获取的,可以尝试使用其他方式获取正确的 IV 值。

如果以上步骤都无法解决问题,可以考虑检查密钥和其他加密参数是否正确,并确保使用的加密算法与加密数据一致。

总结

本文提供了 Java AES/CBC/PKCS5Padding 解密代码示例,并分析了常见的错误,例如 IV 长度不正确错误。希望本文能够帮助读者快速解决问题,并更好地理解 Java AES/CBC/PKCS5Padding 解密机制。

Java AES/CBC/PKCS5Padding 解密代码示例及常见错误解决

原文地址: https://www.cveoy.top/t/topic/pKpq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录