AES解密:javax.crypto.IllegalBlockSizeException:解密时最后一个块不完整

时间:2014-05-03 06:45:14

标签: java exception encryption cryptography aes

我正在尝试使用AES128加密技术解密从Web服务获取的加密数据。

以下是我用来实现同样的代码。

但我总是遇到以下异常: javax.crypto.IllegalBlockSizeException: last block incomplete in decryption

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;
    }

因为我被困在这里,所以请注入宝贵的意见。

3 个答案:

答案 0 :(得分:2)

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

Cipher.doFinal(Base64.decodeBase64(S));

答案 1 :(得分:1)

您正在编码基本64位编码密文而不是解码它。根据您的Base64,您需要调用从StringCharSequence解码为字节数组的函数,然后对其进行解密。请测试结果是块大小的倍数,AES是16字节。

答案 2 :(得分:0)

重要提示

在我的情况下出现此问题的原因是加密未正确, 当我尝试加密数据时,我的代码通过错误来解决中间加密终止的原因, 所以一旦检查加密工作正常。