【问题标题】:Delete EncryptedSharedPreferences with clear() not working使用 clear() 删除 EncryptedSharedPreferences 不起作用
【发布时间】:2019-12-03 18:56:32
【问题描述】:

我使用 androidx.security:security-crypto:1.0.0-alpha02 库中的 EncryptedSharedPreferences 来存储一些令牌。如果我使用prefs.edit().remove("token")).apply()prefs.edit().remove("token")).commit(),则删除令牌。但是,如果我尝试使用clear() 方法立即清除首选项,则不会发生任何事情。

此调用:prefs.edit().clear().commit() 甚至返回 false

我通过使用这种方法获得了 EncryptedSharedPreferences:

    private fun getPrefs(): SharedPreferences {

    val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
    return EncryptedSharedPreferences.create(
            "myPrefs",
            masterKeyAlias,
            context,
            EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
            EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM

    )
}

我是否必须以其他方式清除 EncryptedSharedPreferences?

文档说 (https://developer.android.com/reference/androidx/security/crypto/EncryptedSharedPreferences) :

// 像往常一样使用共享首选项和编辑器 SharedPreferences.Editor 编辑器 = sharedPreferences.edit();

更新 07.02.2020 我在 google bugtracker (https://issuetracker.google.com/issues/138314232) 中创建了一个 bug 票,但他们不会修复它......

【问题讨论】:

  • EncrypedSharedPreferences 是一个新的 api,它可能是一个错误。查看问题跟踪器:issuetracker.google.com/issues?q=EncryptedSharedPreferences 如果没有错误,则为其创建票证。
  • @GiorgosNeokleous 我什么也没找到并创建了一张新票。感谢您的链接。
  • 这方面有什么更新吗?我面临同样的问题。获取异常,java.lang.SecurityException:无法解密密钥。解密失败
  • @Tony 更新了帖子...

标签: android kotlin sharedpreferences androidx


【解决方案1】:

此问题已从版本 1.0.0-rc03 修复。清除现在工作正常。享受吧!

参考发行说明: https://developer.android.com/jetpack/androidx/releases/security#security-crypto-1.0.0-rc03

【讨论】:

    【解决方案2】:

    也适用于不同的活动!

    SharedPreference preference
    
    ...
    
    preference.getSharedPreferences("myPrefs",0).edit().clear().apply();
    

    【讨论】:

      【解决方案3】:

      更新:正如 Jeevanandham 所指出的,此问题已得到修复。 现在有一个稳定的版本。 https://developer.android.com/jetpack/androidx/releases/security#version_100_3


      原答案:

      一种解决方案是使用标准的非安全首选项管理器清除首选项。

      PreferenceManager.getDefaultSharedPreferences(context).edit().clear().apply();

      这将清除所有首选项。

      【讨论】:

        【解决方案4】:

        暂时使用 Remove 方法:

        public void clear(){
        SharedPreferences.Editor editor = prefs.edit();
         Map<String, ?> allEntr = prefs.getAll();
                for (String entry : allEntr.keySet()) {
                    editor.remove(entry);
                }
                prefs.editor.clear();
                prefs.editor.apply();
         }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多