首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何复制或解决KeyStoreException?

如何复制或解决KeyStoreException?
EN

Stack Overflow用户
提问于 2021-08-11 08:15:35
回答 1查看 408关注 0票数 5

使用下一种描述来获取崩溃:

android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyPairFromKeystore(AndroidKeyStoreProvider.java:303) at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyPairFromKeystore(AndroidKeyStoreProvider.java:303) at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePrivateKeyFromKeystore(AndroidKeyStoreProvider.java:324) at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyFromKeystore(AndroidKeyStoreProvider.java:388) at android.security.keystore.AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java:105) at java.security.KeyStore.getKey(KeyStore.java:1062未获得X.509公钥形式在com.mandarine.sai.sdk.tools.keystore.KeyStoreManager.getKeyPair(KeyStoreManager.java:117) at com.mandarine.sai.sdk.tools.keystore.KeyStoreManager.deleteKeyPairs(KeyStoreManager.java:222) at com.mandarine.sai.features.authorizations.common.ConnectionKeyBuilderKt.collectConnectionsAndKeys(ConnectionKeyBuilderKt.java:73) at com.mandarine.sai.features.authorizations.common.ConnectionKeyBuilderKt.collectConnectionsAndKeys(ConnectionKeyBuilderKt.java:41) at com.mandarine.sai.features.authorizations.list.AuthorizationsListViewModel.(AuthorizationsListViewModel.java:79) at com.mandarine。sai.app.ViewModelsFactory.create(ViewModelsFactory.java:102)

KeyStoreException:无效密钥blob

android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePublicKeyFromKeystore(AndroidKeyStoreProvider.java:265) at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePublicKeyFromKeystore(AndroidKeyStoreProvider.java:265) at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyPairFromKeystore(AndroidKeyStoreProvider.java:303) at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePrivateKeyFromKeystore(AndroidKeyStoreProvider.java:324) at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyFromKeystore(AndroidKeyStoreProvider.java:388) at android.security.keystore.AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java:105) at java.security.KeyStorecom.mandarine.sai.sdk.tools.keystore.KeyStoreManager.getKeyPair(KeyStoreManager.java:117) at com.mandarine.sai.sdk.tools.keystore.KeyStoreManager.deleteKeyPairs(KeyStoreManager.java:222) com.mandarine.sai.features.authorizations.common.ConnectionKeyBuilderKt.collectConnectionsAndKeys(ConnectionKeyBuilderKt.java:73) at com.mandarine.sai.features.authorizations.common.ConnectionKeyBuilderKt.collectConnectionsAndKeys(ConnectionKeyBuilderKt.java:41) at com.mandarine.sai.features.authorizations.list.AuthorizationsListViewModel.(AuthorizationsListViewModel.java .getKey(KeyStore.java:1062):79)在com.mandarine.sai.app.ViewModelsFactory.create(ViewModelsFactory.java:102) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187) at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150) at com.mandarine.sai.features.authorizations.list.AuthorizationsListFragment.setupViewModel(AuthorizationsListFragment.java:119) at com.mandarine.sai.features.authorizations.list.AuthorizationsListFragment.onCreate(AuthorizationsListFragment.java:65) at androidx.fragment.app.Fragment.performCreate(Fragment.java:2684)

这是代码:

代码语言:javascript
运行
复制
fun collectConnectionsAndKeys(
    repository: ConnectionsRepositoryAbs,
    keyStoreManager: KeyStoreManagerAbs
): Map<ConnectionID, ConnectionAndKey> {
    return repository.getAllActiveConnections().mapNotNull {
        it.getPrivateKeyForConnection(keyStoreManager)
    }.toMap()
}




  /**
     *  Get related private key for connection
     *
     *  @param connection Connection
     *  @return ConnectionAndKey
     */
    override fun createConnectionAndKeyModel(connection: ConnectionAbs): ConnectionAndKey? {
        return getKeyPair(connection.guid)?.private?.let { key ->
            ConnectionAndKey(connection, key)
        }
    }

    /**
     * Get RSA key pair by the given alias
     *
     * @param alias - the alias name
     * @return KeyPair object
     */
    override fun getKeyPair(alias: String?): KeyPair? {
        val keyAlias = alias ?: return null
        val store = androidKeyStore ?: return null
        return (store.getKey(keyAlias, null) as? PrivateKey)?.let { privateKey ->
            val publicKey: PublicKey? = store.getCertificate(keyAlias).publicKey
            KeyPair(publicKey, privateKey)
        }
    }

更新

所以我写了这样的东西:

代码语言:javascript
运行
复制
override fun getKeyPair(alias: String?): KeyPair? {
    return try {
        val keyAlias = alias ?: return null
        val store = androidKeyStore ?: return null
        (store.getKey(keyAlias, null) as? PrivateKey)?.let { privateKey ->
            val publicKey: PublicKey? = store.getCertificate(keyAlias).publicKey
            KeyPair(publicKey, privateKey)
        }
    } catch (e: UnrecoverableKeyException) {
        null
    } catch (e: Exception) {
        Timber.e(e)
        null
    }
}

但我不明白为什么我的android密钥商店目前在我的小米手机上被屏蔽?我也看到过类似的问题-- herehere,但是从keystore中删除密钥不是我的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2021-08-11 09:30:14

尝试输入您的密码,而不是从ide输入自动存,这是一个已知的错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68738332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档