android - 如何解决 Android 10 上的 KeyStoreConnectException?

标签 android android-keystore android-security keystore-access

我的应用在除 Android 10 之外的所有 Android 操作系统上运行良好。我正在使用已更新为 Android 10 的 Motorola One Power 设备。我们正在使用 Android Keystore 加密数据库。

应用程序在 luanch 上崩溃并出现以下错误。

android.security.keystore.KeyStoreConnectException: Failed to communicate with keystore service at android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized(AndroidKeyStoreCipherSpiBase.java:256) at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineInit(AndroidKeyStoreCipherSpiBase.java:148) at javax.crypto.Cipher.tryTransformWithProvider(Cipher.java:2980)



它是一个 KeyStoreConnectException 问题。该应用程序需要时间连接到 KeyStoreConnectException。

注意:如果我在 Debug模式下运行应用程序,那么它工作正常。

请帮我找到解决方案。提前致谢。

最佳答案

正如 MatPag 指出的那样,这是一个 known bug在早期或更高版本中不存在的 Android 10 中。当我在几个地方调用 Cipher::init() 时,这是 Kotlin 中的一个方便的包装函数:

private fun keyStoreWorkaroundForAndroid10(f: () -> Unit) {
    for (i in 0..3) {
        try {
            f()
            return
        } catch (e: ProviderException) {
            Timber.d("Applying Android 10 KeyStoreConnectException bug workaround. Counter: ${i}, Exception: ${e.message}")
            Thread.sleep(100)
            continue
        }
    }
}
然后你这样称呼它(记住 - 在后台线程中):
keyStoreWorkaroundForAndroid10 {
    cipherEncrypt.init(Cipher.ENCRYPT_MODE, publicKey)
}

关于android - 如何解决 Android 10 上的 KeyStoreConnectException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60482479/

相关文章:

android - 在 Android 中存储 key

android-security - 您的应用包含意图重定向漏洞

Android 应用漏洞 - HostnameVerifier,不在代码库中的任何位置

java - 有什么方法可以用相似的 ID 名称初始化多个 View 吗?

java - INSTALL_PARSE_FAILED_NO_CERTIFICATES 安装修改后的 apk 文件失败(无效的 SHA1 签名),即使在使用 jarsigner 签名之后

android - Android 7 中的 SSLException 而不是 6

android - 在 android 或 react-native 中保护 Assets 和视频文件存储内部的任何好方法

android - 在 Android 中以结构化模式使用 Volley 库

android - RecyclerView 在刷新之前不显示数据