Mor*_*zov 5 crash android kotlin crashlytics
出现以下描述的崩溃:
由 java.security.UnrecoverableKeyException 引起:无法在 android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePublicKeyFromKeystore(AndroidKeyStoreProvider.java:263) 处获取 X.509 形式的公钥 android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyPairFromKeystore(AndroidKeyStoreProvider.java: 303) 在 android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePrivateKeyFromKeystore(AndroidKeyStoreProvider.java:324) 在 android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyFromKeystore(AndroidKeyStoreProvider.java:388) 在 android.security.keystore.AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java :105)在java.security.KeyStore.getKey(KeyStore.java:1062)在com.mandarine.sai.sdk.tools.keystore.KeyStoreManager.getKeyPair(KeyStoreManager.java:117)在com.mandarine.sai.sdk。 tools.keystore.KeyStoreManager.deleteKeyPairs(KeyStoreManager.java:222) 位于 com.mandarine.sai.features.authorizations.common.ConnectionKeyBuilderKt.collectConnectionsAndKeys(ConnectionKeyBuilderKt.java:73) 位于 com.mandarine.sai.features.authorizations.common。 ConnectionKeyBuilderKt.collectConnectionsAndKeys(ConnectionKeyBuilderKt.java:41) 在 com.mandarine.sai.features.authorizations.list.AuthorizationsListViewModel.(AuthorizationsListViewModel.java:79) 在 com.mandarine.sai.app.ViewModelsFactory.create(ViewModelsFactory.java:102 )
KeyStoreException:无效的密钥 blob
由 android.security.KeyStoreException 引起:android.security.keystore.getKeyStoreException(KeyStore.java:1301) 处的 android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePublicKeyFromKeystore(AndroidKeyStoreProvider.java:265) 处的密钥 blob 无效。 AndroidKeyStoreProvider.loadAndroidKeyStoreKeyPairFromKeystore(AndroidKeyStoreProvider.java:303) 在 android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePrivateKeyFromKeystore(AndroidKeyStoreProvider.java:324) 在 android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyFromKeystore(AndroidKeyStoreProvider.java:388) 在 android.security.keystore .AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java:105) 在 java.security.KeyStore.getKey(KeyStore.java:1062) 在 com.mandarine.sai.sdk.tools.keystore.KeyStoreManager.getKeyPair(KeyStoreManager.java:117) 在com.mandarine.sai.sdk.tools.keystore.KeyStoreManager.deleteKeyPairs(KeyStoreManager.java:222) 位于 com.mandarine.sai.features.authorizations.common.ConnectionKeyBuilderKt.collectConnectionsAndKeys(ConnectionKeyBuilderKt.java:73) 位于 com.mandarine。 sai.features.authorizations.common.ConnectionKeyBuilderKt.collectConnectionsAndKeys(ConnectionKeyBuilderKt.java:41) 在 com.mandarine.sai.features.authorizations.list.AuthorizationsListViewModel.(AuthorizationsListViewModel.java:79) 在 com.mandarine.sai.app.ViewModelsFactory .create(ViewModelsFactory.java:102) 在 androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187) 在 androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150) 在 com.mandarine.sai.features.authorizations。 list.AuthorizationsListFragment.setupViewModel(AuthorizationsListFragment.java:119)在com.mandarine.sai.features.authorizations.list.AuthorizationsListFragment.onCreate(AuthorizationsListFragment.java:65)在androidx.fragment.app.Fragment.performCreate(Fragment.java:第2684章)
这是代码:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
所以我写了这样的东西:
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
}
}
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么我的 Android 密钥库目前在我的小米手机上被阻止?我在这里和这里看到了类似的问题,但是从密钥库中删除密钥不是我的解决方案。
归档时间: |
|
查看次数: |
803 次 |
最近记录: |