首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AES解密: javax.crypto.IllegalBlockSizeException:解密中的最后一块不完整

AES解密: javax.crypto.IllegalBlockSizeException:解密中的最后一块不完整
EN

Stack Overflow用户
提问于 2014-05-03 06:45:14
回答 3查看 12.3K关注 0票数 0

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

下面是我用来实现相同的代码。

但我总是有以下例外:javax.crypto.IllegalBlockSizeException: last block incomplete in decryption

代码语言:javascript
复制
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;
    }

请倒出你宝贵的投入,因为我被困在这里。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-03 15:17:27

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

票数 1
EN

Stack Overflow用户

发布于 2014-05-03 07:28:49

您必须调用Base64.decdebase 64(S)。然后调用Cipher.doFinal()

Cipher.doFinal(Base64.decdeBase64);

票数 2
EN

Stack Overflow用户

发布于 2016-09-01 10:02:07

重要注

在我的例子中,这个问题是由于加密没有正确执行,当我试图加密数据时,我的代码通过错误加密--这就是为什么在加密过程中终止的原因--因此,一旦您检查加密是否正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23441208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档