kotlin 使用clear()删除EncryptedSharedPreferences无效

x8goxv8g  于 2023-08-06  发布在  Kotlin
关注(0)|答案(5)|浏览(120)

我使用androidx.security:security-crypto:1.0.0-alpha 02 lib中的EncryptedSharedPreferences来存储一些令牌。如果我使用prefs.edit().remove("token")).apply()prefs.edit().remove("token")).commit(),令牌将被删除。但是如果我尝试用clear()方法一次清除prefs,什么也没有发生。
这个调用: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 editor = sharedPreferences.edit();

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

kcugc4gi

kcugc4gi1#

此问题从版本1.0.0-rc 03修复。Clear现在工作正常。好好享受吧!
参考发布说明:https://developer.android.com/jetpack/androidx/releases/security#security-crypto-1.0.0-rc03

i7uq4tfw

i7uq4tfw2#

也适用于不同的活动!

SharedPreference preference

...

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

字符串

3pvhb19x

3pvhb19x3#

更新:正如Jeevanandham所指出的,这个问题已经修复。现在有一个稳定的版本。https://developer.android.com/jetpack/androidx/releases/security#version_100_3
原文回答:
一种解决方案是使用标准的、不安全的首选项管理器来清除首选项。
第一个月
这将清除所有首选项。

mwkjh3gx

mwkjh3gx4#

原来这是图书馆的bug。它不能一次清除所有键。https://developer.android.com/jetpack/androidx/releases/security#security-crypto-1.0.0-rc03
因此,简单的解决方案是调用共享首选项而不加密示例。

private fun clearPref() {
       context.getSharedPreferences("myPrefs",
           Context.MODE_PRIVATE).edit().clear().apply()
}

字符串

wwtsj6pe

wwtsj6pe5#

暂使用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();
 }

字符串

相关问题