Java 密码:抛出IllegalBlockSizeException

Java 密码:抛出IllegalBlockSizeException,java,android,encryption,Java,Android,Encryption,我正在尝试解密Java中的数据,该数据是使用AES-256-CBC在PHP中加密的。Javacipher.doFinal抛出IllegalBlockSizeException的解密方法。有人能帮我解决这个问题吗?在过去的两天里我一直在努力解决这个问题。如果需要更多信息,请告诉我 public static String decrypt(String encryptedResult, String secretKey, String iv) { String decryp

我正在尝试解密Java中的数据,该数据是使用AES-256-CBC在PHP中加密的。Java
cipher.doFinal
抛出IllegalBlockSizeException的解密方法。有人能帮我解决这个问题吗?在过去的两天里我一直在努力解决这个问题。如果需要更多信息,请告诉我

     public static String decrypt(String encryptedResult, String secretKey, String iv) {
        String decrypted;
        try {
            byte[] bytes = new BigInteger(encryptedResult.trim(),16).toByteArray();
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, makeKey(secretKey), makeIv(iv));
            byte[] bytesFinal = cipher.doFinal(bytes);
            decrypted = new String(bytesFinal);

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return decrypted;
    }

    static AlgorithmParameterSpec makeIv(String iv) {
        try {
            return new IvParameterSpec(iv.getBytes(StandardCharsets.UTF_8));
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    static Key makeKey(String secretKey) {
        return new SecretKeySpec(secretKey.getBytes(), "AES");
    }

该错误表明
byte[]bytes
的大小不是AES块大小16的倍数。字节的长度是多少?@EbbeM.Pedersen字节的长度是33不要修剪输入,你是怎么做到的?不要使用BigInteger来解码你的十六进制字符串。。在您的示例中,它用0作为数据的前缀,从而将数据增加到33个字节,使其成为无效的加密块。根据发布的
16
基数和字符串
cae0…2bde
,加密数据似乎是十六进制编码的。因此,十六进制解码可能比Base64解码更有用,例如,
byte[]bytes=hextStringToByteArray(encryptedResult)其中
hexStringToByteArray
来自。