gpt4 book ai didi

java - 无法从其他 Activity 访问 EncryptedSharedPreferences

转载 作者:行者123 更新时间:2023-12-05 05:03:27 25 4
gpt4 key购买 nike

第一个 Activity

try {
masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC);
sharedPreferences = EncryptedSharedPreferences.create(
"secret_shared_prefs",
masterKeyAlias,
getApplicationContext(),
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
);
} catch (GeneralSecurityException | IOException e) {
e.printStackTrace();
}

SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("memberID", response.body().get(0).getMemberID().toString()).commit();

第二个 Activity

SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("secret_shared_prefs", MODE_PRIVATE);
sharedPreferences.getString("memberID", "unknown");

在同一 Activity 中,getSharedPreferences() 按预期工作。当尝试使用此代码访问另一个 Activity 中的首选项时,它总是返回默认值。看来解密有问题。

最佳答案

遇到此问题的任何人的更新。我遇到了同样的问题,并通过与第一个 Activity 相同的方式初始化 sharedPreferences 来修复它。因此(在上面给出的示例中)第二个 Activity 中的行:

SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("secret_shared_prefs", MODE_PRIVATE);

替换为:

try {
masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC);
sharedPreferences = EncryptedSharedPreferences.create(
"secret_shared_prefs",
masterKeyAlias,
getApplicationContext(),
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
);
} catch (GeneralSecurityException | IOException e) {
e.printStackTrace();
}

现在可以通过常规的 getString(key, deafult) 方法访问:

sharedPreferences.getString("memberID","unknown");

对于像我这样的新手,我还建议检查保存首选项的 .xml 文件,以检查它们是否真的被加密(可以在 data/data/"application_name"/shared_prefs/"preference_name".xml 中找到) .

关于java - 无法从其他 Activity 访问 EncryptedSharedPreferences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61653072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com