java - AES128 解密 :javax. crypto.badpaddingexception pad block 已损坏

标签 java android exception encryption aes

我尝试解密从网络服务收到的加密数据。

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

cipher.doFinal()

我得到以下异常:

javax.crypto.badpaddingexception pad block corrupted

我浏览了我的帖子,但最终没有找到解决方案。我被困在这里了。

最佳答案

SecureRandom sr = SecureRandom.getInstance("SHA1PRNG","Crypto");

完美运行

注意:此代码仅适用于最高 Android 6 的设备。从 Android 7.0 开始,“Crypto” provider has been removed ,因此此代码将失败。

关于java - AES128 解密 :javax. crypto.badpaddingexception pad block 已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23491143/

相关文章:

android - 关于将 android block 添加到顶级 build.gradle 的 Android 文档是否错误

java - Objects.requireNonNull(T obj) 而不是 null 检查并手动抛出 IllegalArgumentException?

java - 抛出或重新抛出异常?

java - 如何更改 JTable 中单元格的背景和格式

java - android 中的 Calendar 对象仅返回默认值。为什么?

java - 同一类位于多个 jar 中

android - "Conversion to Dalvik format failed with error 1"更新到 ADT 14 后

java - 阅读 MIME 多部分的正文部分

Android - ProGuard 修改导致应用程序崩溃

java - 如何设置元素在所有设备上保持原位