javax.crypto.BadPaddingException:错误:1e000065:密码函数:OPENSSL_internal:BAD_DECRYPT

问题描述 投票:0回答:2

我将 AES 解密密钥存储在 AndroidKeyStore 中以解密来自 SQLiteDB 的数据。不幸的是,有时我很少遇到这个错误(任何安卓设备和任何 API)。

我想知道这个错误到底是什么意思。

javax.crypto.BadPaddingException: error:1e000065:Cipher functions:OPENSSL_internal:BAD_DECRYPT
.

我在哪里可以找到这些

error:*
的列表?

aes android-keystore java-security-manager
2个回答
0
投票

Android 中的解密似乎与后端的默认 Java 代码不同。就我而言,我遇到了这个错误原因。将 IV 和 SecretKey 的值重新编码为 UTF-8。

我正在像下面那样转换 KEY 和 IV,并且导致字符串重新编码。

val ivParameterSpec = IvParameterSpec(iv.toByteArray(charset("utf-8")))
val secretKeySpec = SecretKeySpec(key.toByteArray(charset("utf-8")), "AES")

我删除了“UTF-8”部分,因为它默认转换为“UTF-8”,无需再次传递。

val ivParameterSpec = IvParameterSpec(iv.toByteArray())
val secretKeySpec = SecretKeySpec(key.toByteArray(), "AES")

(注:encryptedData的长度为128,IV和Key的长度为16,根据算法需要都可以被16整除。)

完整代码如下。

 fun decrypt(encryptedData: String, iv: String, key: String): String? {
        try {
            //IV & Key Generation
            val ivParameterSpec = IvParameterSpec(iv.toByteArray())
            val secretKeySpec = SecretKeySpec(key.toByteArray(), "AES")

            val c = Cipher.getInstance("AES/CBC/PKCS5PADDING")
            c.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec)

            val decodedValue = Base64.decode(encryptedData, Base64.URL_SAFE)
            val decValue = c.doFinal(decodedValue)

            return String(decValue)

        } catch (ex: IllegalBlockSizeException) {
            println(ex.message)
        } catch (ex: BadPaddingException) {
            println(ex.message)
        } catch (ex: InvalidKeyException) {
            println(ex.message)
        } catch (ex: NoSuchAlgorithmException) {
            println(ex.message)
        } catch (ex: NoSuchPaddingException) {
            println(ex.message)
        } catch (ex: Exception) {
            println(ex.message)
        }
        return null
    }

0
投票

我有同样的问题,因为我已经为

cipher
初始化了
ENCRYPT_MODE
,但是在我调用
doFinal
进行加密之前,我已经在另一个地方为
cipher
重新初始化了相同的
DECRYPT_MODE
。所以,不必有相同的race condition,那可能没问题。

© www.soinside.com 2019 - 2024. All rights reserved.