Android 7和8上的Android javax.crypto.BadPaddingException pad块损坏

时间:2019-03-04 12:58:34

标签: android encryption aes badpaddingexception

我看到生产中的某些例外情况仅发生在某些特定用户上(上个月有10个用户,而每月有10万个活跃用户)

我的加密和解密方法使用相同的算法,所有其他用户都不会遇到此类问题

private byte[] encrypt(String cleartext) {
    final Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(secretKey, "AES"));
    return cipher.doFinal(cleartext.getBytes("UTF-8"));
}

private String decrypt(byte[] cipherbytes)  {
    final Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(secretKey, "AES"));
    return new String(cipher.doFinal(cipherbytes), "UTF-8");
}

private static String encode(byte[] input) {
    return Base64.encodeToString(input, Base64.NO_PADDING | Base64.NO_WRAP);
}

private static byte[] decode(String input) {
    return Base64.decode(input, Base64.NO_PADDING | Base64.NO_WRAP);
}

// these methods are exposed
String encryptAndEncodeMessage(String message) {
    return encode(encrypt(message))
}

String decryptAndDecodeMessage(String encodedEncryptedMessage) {
    return decrypt(decode(encodedEncryptedMessage))
}

secretKey仅创建一次并存储在共享首选项中,因此可以保证是相同的

是什么导致该异常仅在某些用户以及某些特定设备上出现?我在日志中仅看到Huawei Mate 9 (MHA-L09) Android 7Huawei P20 Lite (ANE-LX1) Android 8

可能是某种尝试破解加密存储的方法吗?或加密逻辑中有一些错误?我对少量此类崩溃感到困惑,好像有错误会影响大量用户

0 个答案:

没有答案