Android 的 SharedPreferences 是一种用于存储和检索键值对数据的机制。EncryptedSharedPreferences 是 SharedPreferences 的一个扩展,它在存储数据之前会对其进行加密。下面是一个包含代码示例的解决方案:
首先,确保在项目的 build.gradle 文件中添加以下依赖项:
implementation 'androidx.security:security-crypto:1.0.0-rc01'
接下来,创建一个帮助类来管理 SharedPreferences 和 EncryptedSharedPreferences:
import android.content.Context
import android.content.SharedPreferences
import androidx.security.crypto.EncryptedSharedPreferences
import androidx.security.crypto.MasterKeys
object SharedPreferencesHelper {
private const val SHARED_PREFS_NAME = "MySharedPrefs"
private const val ENCRYPTED_SHARED_PREFS_NAME = "MyEncryptedSharedPrefs"
fun getSharedPreferences(context: Context): SharedPreferences {
return context.getSharedPreferences(SHARED_PREFS_NAME, Context.MODE_PRIVATE)
}
fun getEncryptedSharedPreferences(context: Context): SharedPreferences {
val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
return EncryptedSharedPreferences.create(
ENCRYPTED_SHARED_PREFS_NAME,
masterKeyAlias,
context,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
}
}
在上述代码中,我们定义了两个常量,用于指定 SharedPreferences 和 EncryptedSharedPreferences 的名称。然后,我们提供了两个方法来获取 SharedPreferences 和 EncryptedSharedPreferences 的实例。对于 EncryptedSharedPreferences,我们还使用了 androidx.security.crypto 库中的 MasterKeys 类来生成一个加密密钥。
以下是使用 SharedPreferences 的示例代码:
val sharedPreferences = SharedPreferencesHelper.getSharedPreferences(context)
val editor = sharedPreferences.edit()
editor.putString("key", "value")
editor.apply()
val value = sharedPreferences.getString("key", "")
以下是使用 EncryptedSharedPreferences 的示例代码:
val encryptedSharedPreferences = SharedPreferencesHelper.getEncryptedSharedPreferences(context)
val editor = encryptedSharedPreferences.edit()
editor.putString("key", "value")
editor.apply()
val value = encryptedSharedPreferences.getString("key", "")
通过以上代码示例,你可以使用 SharedPreferences 和 EncryptedSharedPreferences 来存储和检索数据。EncryptedSharedPreferences 会在存储数据之前将其加密,以提供更高的安全性。