如何使用https://developer.android.google.cn/reference/androidx/security/crypto/EncryptedSharedPreferences在我的 android java 应用程序中实现加密共享首选项?我不知道如何实现它,有人可以帮忙吗?
问问题
2356 次
2 回答
3
我正在使用与@Chirag 编写的代码类似的代码,但是在我对我的 Android Studio 4.0 项目应用新的更新后,我收到了一个警告说MasterKeys
类已被弃用。
所以我找到了这个答案,它成功了。这是片段中的代码。如果您想在 MainActivity 中使用它,请更改getContext()
为this
MasterKey getMasterKey() {
try {
KeyGenParameterSpec spec = new KeyGenParameterSpec.Builder(
"_androidx_security_master_key_",
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.setKeySize(256)
.build();
return new MasterKey.Builder(getContext())
.setKeyGenParameterSpec(spec)
.build();
} catch (Exception e) {
Log.e(getClass().getSimpleName(), "Error on getting master key", e);
}
return null;
}
private SharedPreferences getEncryptedSharedPreferences() {
try {
return EncryptedSharedPreferences.create(
Objects.requireNonNull(getContext()),
"Your preference file name",
getMasterKey(), // calling the method above for creating MasterKey
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
);
} catch (Exception e) {
Log.e(getClass().getSimpleName(), "Error on getting encrypted shared preferences", e);
}
return null;
}
然后你可以像这样使用上面的:
public void someFunction(){
SharedPreferences sharedPreferences = getEncryptedSharedPreferences();
//Used to add new entries and save changes
SharedPreferences.Editor editor = sharedPreferences.edit();
//To add entry to your shared preferences file
editor.putString("Name", "Value");
editor.putBoolean("Name", false);
//Apply changes and commit
editor.apply();
editor.commit();
//To clear all keys from your shared preferences file
editor.clear().apply();
//To get a value from your shared preferences file
String returnedValue = sharedPreferences.getString("Name", "Default value if null is returned or the key doesn't exist");
}
于 2020-07-20T22:07:29.930 回答
2
根据文档示例,您可以EncryptedSharedPreferences
像这样初始化。
public SharedPreferences getEncryptedSharedPreferences(){
String masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC);
SharedPreferences sharedPreferences = EncryptedSharedPreferences.create(
"secret_shared_prefs_file",
masterKeyAlias,
context,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
);
return sharedPreferences;
}
保存数据
getEncryptedSharedPreferences().edit()
.putString("key", value)
.apply()
获取数据
getEncryptedSharedPreferences().getString("key", "defaultValue");
确保您的应用 API 版本为 23+,并且您需要添加此依赖项
implementation "androidx.security:security-crypto:1.0.0-alpha02" //Use latest version
于 2020-06-02T03:29:26.330 回答