AES解密:javax.crypto.IllegalBlockSizeException:解密中的最后一个块未完成

AES解密:javax.crypto.IllegalBlockSizeException:解密中的最后一个块未完成,java,exception,encryption,cryptography,aes,Java,Exception,Encryption,Cryptography,Aes,我正在尝试使用AES128加密技术对从web服务获得的加密数据进行解密 下面是我用来实现同样目的的代码 但我总是会有以下例外: javax.crypto.IllegalBlockSizeException:解密中最后一个块未完成 public static String decrypt(String strToDecrypt) { try { Cipher cipher = Cipher.getInstance("AES/CBC/

我正在尝试使用AES128加密技术对从web服务获得的加密数据进行解密

下面是我用来实现同样目的的代码

但我总是会有以下例外:
javax.crypto.IllegalBlockSizeException:解密中最后一个块未完成

public static String decrypt(String strToDecrypt)
    {

        try
        {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
            final SecretKeySpec secretKey = new SecretKeySpec(AppConstants.AESEncryptionKey.getBytes("UTF8"), "AES");
            cipher.init(Cipher.DECRYPT_MODE, secretKey,new IvParameterSpec(new byte[16])); //new IvParameterSpec(new byte[16])
            byte base64Data[] = Base64.encode(strToDecrypt.getBytes(), Base64.DEFAULT);
            @SuppressWarnings("unused")
            String s = base64Data.toString();
            byte decBytes[] = cipher.doFinal(base64Data);
            String decStr = new String(decBytes);
            return decStr;
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

请输入您宝贵的信息,因为我被困在这里了。

您必须呼叫Base64.decodeBase64(s)。然后调用Cipher.doFinal()


Cipher.doFinal(Base64.decodeBase64(s))

您必须调用Base64.decodeBase64(s)。然后调用Cipher.doFinal()


Cipher.doFinal(Base64.decodeBase64(s))

您必须调用Base64.decodeBase64(s)。然后调用Cipher.doFinal()


Cipher.doFinal(Base64.decodeBase64(s))

您必须调用Base64.decodeBase64(s)。然后调用Cipher.doFinal()


Cipher.doFinal(Base64.decodeBase64(s))

您正在对基本64编码密文进行编码,而不是对其进行解码。根据
Base64
的不同,您需要调用一个函数,将
字符串
字符序列
解码为字节数组,然后对其进行解密。请测试结果是否是块大小的倍数,AES为16字节。

您正在对基本64编码密文进行编码,而不是对其进行解码。根据
Base64
的不同,您需要调用一个函数,将
字符串
字符序列
解码为字节数组,然后对其进行解密。请测试结果是否是块大小的倍数,AES为16字节。

您正在对基本64编码密文进行编码,而不是对其进行解码。根据
Base64
的不同,您需要调用一个函数,将
字符串
字符序列
解码为字节数组,然后对其进行解密。请测试结果是否是块大小的倍数,AES为16字节。

您正在对基本64编码密文进行编码,而不是对其进行解码。根据
Base64
的不同,您需要调用一个函数,将
字符串
字符序列
解码为字节数组,然后对其进行解密。请测试结果是否是块大小的倍数,AES为16字节。

重要注意事项

在我的例子中,这个问题是因为加密没有正确执行, 当我试图加密数据时,我的代码出错了,这就是为什么中间加密被终止的原因,
因此,一旦您检查加密是否正常工作。重要注意事项

在我的例子中,这个问题是因为加密没有正确执行, 当我试图加密数据时,我的代码出错了,这就是为什么中间加密被终止的原因,
因此,一旦您检查加密是否正常工作。重要注意事项

在我的例子中,这个问题是因为加密没有正确执行, 当我试图加密数据时,我的代码出错了,这就是为什么中间加密被终止的原因,
因此,一旦您检查加密是否正常工作。重要注意事项

在我的例子中,这个问题是因为加密没有正确执行, 当我试图加密数据时,我的代码出错了,这就是为什么中间加密被终止的原因,

因此,一旦您检查加密是否正常工作。

您从web服务获取的字符串是什么格式的?Base64编码?我得到一个加密字符串,我将它转换为Base64编码字符串,然后解密它。您从web服务得到的字符串是什么格式的?Base64编码?我得到一个加密字符串,我将它转换为Base64编码字符串,然后解密它。您从web服务得到的字符串是什么格式的?Base64编码?我得到一个加密字符串,我将它转换为Base64编码字符串,然后解密它。您从web服务得到的字符串是什么格式的?Base64 encoded?我得到一个加密字符串,我将其转换为Base64 encoded字符串,然后对其进行解密。在android eclipse中,当我使用decodeBase64(字符串)时,我得到以下错误:类型的decodeBase64(字符串)方法未定义Base64@iJose那么,您使用的是哪种
Base64
,以及哪些方法可用。采取一些主动措施会很好。@owlstead我正在使用android.util.Base64类对Base64编码的密码文本进行解码,然后对其进行解密。因此,在android eclipse中检查时,当我使用decodeBase64(字符串)时,会出现以下错误:类型的decodeBase64(字符串)方法未定义Base64@iJose好,您使用的是哪个
Base64
,哪些方法可用。采取一些主动措施会很好。@owlstead我正在使用android.util.Base64类对Base64编码的密码文本进行解码,然后对其进行解密。因此,在android eclipse中检查时,当我使用decodeBase64(字符串)时,会出现以下错误:类型的decodeBase64(字符串)方法未定义Base64@iJose好,您使用的是哪个
Base64
,哪些方法可用。采取一些主动措施会很好。@owlstead我正在使用android.util.Base64类对Base64编码的密码文本进行解码,然后对其进行解密。因此,在android eclipse中检查时,当我使用decodeBase64(字符串)时,会出现以下错误:类型的decodeBase64(字符串)方法未定义Base64@iJose好,您使用的是哪个
Base64
,哪些方法可用。一些主动性会很好。@owlstead我正在使用android.util.Base64类对Base64编码的密码文本进行解码,然后对其进行解密。因此,请检查我还有一个问题,您提到的关于块大小的问题,我想使用AES 128算法进行解密,你知道怎么做吗?好的,先生,在使用解码函数时,我现在得到以下异常javax.crypto.BadPaddingExc