当前位置: 首页 > 知识库问答 >
问题:

AES128解密:javax。加密。badpaddingexception填充块已损坏

祁永嘉
2023-03-14

我尝试解密从Web服务接收的加密数据。

使用AES 128进行加密。

我使用以下代码对数据进行解密:

public static String decrypt(String strToDecrypt)
{       
    try
    {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); //AES/CBC/PKCS7Padding
        SecretKeySpec secretKey = new SecretKeySpec(AppConstants.AESEncryptionKey.getBytes("UTF8"), "AES");
        int blockSize = cipher.getBlockSize();
        cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(new byte[blockSize])); //new IvParameterSpec(new byte[16])
        byte decBytes[] = cipher.doFinal(Base64.decode(strToDecrypt, 0));
        // byte decBytes[] = cipher.doFinal(Base64.decodeBase64(strToDecrypt));
        String decStr = new String(decBytes);
        System.out.println("After decryption :" + decStr);
        return decStr;
    }
    catch (Exception e)
    {
        System.out.println("Exception in decryption : " + e.getMessage());
    }
    return null;
}

密码doFinal()

我得到了以下例外:

javax.crypto.badpaddingexception垫块损坏

我浏览了我的帖子,但没有找到解决办法。我被困在这里了。

共有3个答案

漆雕嘉平
2023-03-14

在我的例子中,问题出现是因为加密密钥和解密密钥都不同,当我用相同的值检查这两个密钥时,问题就不会出现

党浩阔
2023-03-14

AES密钥应该由随机数据组成。如果您将它们存储为String,那么您可能会丢失信息,特别是如果您使用诸如UTF-8的编码。您的行:

AppConstants.AESEncryptionKey.getBytes("UTF8")

使您在与字符串的转换过程中可能丢失了数据。如果需要字符串,请使用十六进制,或者只将密钥存储为字节数组

请注意,此答案并不表示任何与安全相关的提示。通常,您只希望派生键或将它们存储在容器中。您也不希望在不安全的通道上使用CBC。

谢唯
2023-03-14
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG","Crypto");

完美地工作

注意:此代码仅适用于Android 6之前的设备。从Android 7.0开始,“Crypto”提供程序已被删除,因此此代码将失败。

 类似资料:
  • 我被困在一个问题与AES解密在我的Android应用程序。我已经搜索了很多,但无法得到解决方案。 这是步骤,我正在做的。 用我的密钥加密信用卡号并发送到Web服务器 此外,来自服务器的加密信息与我们以加密格式发送的信息不同。在iPhone应用程序中也做了同样的事情,iPhone能够成功地解密信息。 我使用以下代码进行加密和解密。 请建议。 编辑:我还有一件事,那就是工作

  • 在一个做其他事情的大型应用程序中——我需要加密和解密一个文件。所以我一直在四处寻找,并实现了这两个核心功能,基本上使用RSA密钥包装一个随机的AES密钥来加密一个文件。对称键和iv被写入文件的开头。 我在下面的解密函数部分得到一个异常(“javax.crypto.BadPaddingException:Decryption error”)。在肯安迪夫线路上——doFinal。具体来说,这一行是异常

  • 问题内容: 在此代码中,此行导致异常: 我从以下位置获得了代码:http : //www.techrepublic.com/blog/software-engineer/attention-android-developers- keep-user-data-safe/ 有任何想法吗? 详细信息:我也在Android上对其进行加密 问题答案: owlstead的建议很有帮助,但是对于这种情况,在使

  • 我的Arduino板上有以下代码: 它可以加密和解密,我在串行下一个输出: njf 00 xnz 92 nvczkexeuhkg = = < br >解密:123456789 但问题是,如果我使用在线工具进行解密https://www.devglan.com/online-tools/aes-encryption-decryption,键1234567891234567、IV 7654321987

  • 我将AES与salt和IV一起用于加密和解密一个唯一的ID,但它给出了javax。加密。解密时出现BadPaddingException。 每次解密数据时给出的完整错误堆栈跟踪 加密方法- 解密方法 我是JCA的新手。

  • 我做了很多研究,但我找不到我的问题的答案。我在做AES加密(Rijndael块大小128位)。NET和解密在Android(AES)与相同的密码,盐 C#加密代码片段: Android解密代码段: 密码doFinal调用引发以下异常。 “05-02 18:17:38.239:W/System.err(25547):javax.crypto.BadPaddingException:填充块损坏” 我确