标签: androidx-security

EncryptedSharedPreferences 导致 UnrecoverableKeyException

我正在以EncryptedSharedPreferencesGoogle 推荐的方式使用新类:

private fun securePrefs(context: Context): SharedPreferences {
    val fileName = "sharedPrefsSecure"
    val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
    return EncryptedSharedPreferences.create(fileName, masterKeyAlias, context,
        EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM)
}
Run Code Online (Sandbox Code Playgroud)

但是,该应用程序在第二天在模拟器(Pixel 2 API 26)上崩溃了。每次启动应用程序时都会发生这种情况,直到我完全卸载它并再次重新安装(从带有运行的 Studio) - 然后它工作正常。但是,一旦我重新启动模拟器,它就会再次崩溃,直到完全重新安装。即使在重新启动后,我的三星也很好。我想知道我是否也会在真实设备上得到类似的东西。

这是崩溃堆栈跟踪:

2020-02-24 17:42:52.632 12398-12398/com.myapp E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.myapp, PID: 12398
    java.security.UnrecoverableKeyException: Failed to obtain information about key
        at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreSecretKeyFromKeystore(AndroidKeyStoreProvider.java:282)
        at android.security.keystore.AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java:98)
        at java.security.KeyStore.getKey(KeyStore.java:1062)
        at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.<init>(AndroidKeystoreAesGcm.java:48)
        at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.getAead(AndroidKeystoreKmsClient.java:111)
        at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.getOrGenerateNewAeadKey(AndroidKeystoreKmsClient.java:130)
        at com.google.crypto.tink.integration.android.AndroidKeysetManager.<init>(AndroidKeysetManager.java:118)
        at com.google.crypto.tink.integration.android.AndroidKeysetManager.<init>(AndroidKeysetManager.java:88)
        at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:185)
        at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:123)
        at com.myapp.base.service.DefaultKeystoreService.securePrefs(DefaultKeystoreService.kt:43)
        at com.myapp.base.service.DefaultKeystoreService.sharedPrefsForKey(DefaultKeystoreService.kt:37)
        at com.myapp.base.service.DefaultKeystoreService.get(DefaultKeystoreService.kt:17)
        at com.myapp.base.repository.DefaultCredentialsRepository.getRefreshToken(DefaultCredentialsRepository.kt:78)
        at …
Run Code Online (Sandbox Code Playgroud)

android android-keystore androidx androidx-security

7
推荐指数
0
解决办法
1656
查看次数