1

我正在使用加密共享首选项来加密首选项数据。我通过以下方式使用它:

val masterKey = MasterKey.Builder(context)
                .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
                .build()

        val sharedPreferences = EncryptedSharedPreferences.create(
                context,
                prefName,
                masterKey,
                EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
                EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
        )

我从我的应用程序类访问这个安全共享的首选项实例。这在我的生产应用程序中导致了 ANR 问题。

at sun.misc.Unsafe.park (Native method)
  at java.util.concurrent.locks.LockSupport.park (LockSupport.java:190)
  at java.util.concurrent.CompletableFuture$Signaller.block (CompletableFuture.java:1723)
  at java.util.concurrent.ForkJoinPool.managedBlock (ForkJoinPool.java:3446)
  at java.util.concurrent.CompletableFuture.waitingGet (CompletableFuture.java:1752)
  at java.util.concurrent.CompletableFuture.get (CompletableFuture.java:1923)
  at android.security.KeyStore.begin (KeyStore.java:1104)
  at android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized (AndroidKeyStoreCipherSpiBase.java:248)
  at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineInit (AndroidKeyStoreCipherSpiBase.java:109)
  at javax.crypto.Cipher.tryTransformWithProvider (Cipher.java:2984)
  at javax.crypto.Cipher.tryCombinations (Cipher.java:2891)
  at javax.crypto.Cipher$SpiAndProviderUpdater.updateAndGetSpiAndProvider (Cipher.java:2796)
  at javax.crypto.Cipher.chooseProvider (Cipher.java:773)
  at javax.crypto.Cipher.init (Cipher.java:1143)
  at javax.crypto.Cipher.init (Cipher.java:1084)
  at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.encryptInternal (AndroidKeystoreAesGcm.java:84)
  at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.encrypt (AndroidKeystoreAesGcm.java:68)
  at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.validateAead (AndroidKeystoreKmsClient.java:248)
  at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.getAead (AndroidKeystoreKmsClient.java:165)
  at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewMasterKey (AndroidKeysetManager.java:267)
  at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build (AndroidKeysetManager.java:236)
  at androidx.security.crypto.EncryptedSharedPreferences.create (EncryptedSharedPreferences.java:160)
  at androidx.security.crypto.EncryptedSharedPreferences.create (EncryptedSharedPreferences.java:120)
  at my.application.example.sharedpref.PrefProvider.getSecuredSharedPref (PrefProvider.java:15)

此行为观察器主要在 Android 9 和 10 上。

cipher.init周围报告了 Andorid 错误。有什么办法可以解决这个问题。它导致我的应用程序在 Playstore 上出现不良行为。

4

0 回答 0