Android
Secure SharedPreferences
Buscar..
Introducción
Las preferencias compartidas son archivos XML basados en valores clave . Se encuentra en /data/data/package_name/shared_prefs/<filename.xml>
.
Por lo tanto, un usuario con privilegios de root puede navegar a esta ubicación y puede cambiar sus valores. Si desea proteger los valores en sus preferencias compartidas, puede escribir un mecanismo simple de cifrado y descifrado.
Debe tener en cuenta que las Preferencias Compartidas nunca fueron diseñadas para ser seguras, es solo una forma simple de conservar los datos.
Sintaxis
- Cifrado de cadena estática pública (entrada de cadena);
- Descifrado de cadenas públicas estáticas (entrada de cadenas);
Parámetros
Parámetro | Definición |
---|---|
entrada | Valor de cadena para cifrar o descifrar. |
Observaciones
Las preferencias compartidas nunca se crearon para ser seguras, es solo una forma simple de conservar los datos.
No es una buena idea usar preferencias compartidas para almacenar información crítica, como las credenciales de usuario. Para guardar las credenciales de usuario (como las contraseñas), debe utilizar otros métodos, como el AccountManager
de Android.
Asegurar una preferencia compartida
Codec simple
Aquí, para ilustrar el principio de funcionamiento, podemos usar cifrado y descifrado simples de la siguiente manera.
public static String encrypt(String input) {
// Simple encryption, not very strong!
return Base64.encodeToString(input.getBytes(), Base64.DEFAULT);
}
public static String decrypt(String input) {
return new String(Base64.decode(input, Base64.DEFAULT));
}
Técnica de Implementación
public static String pref_name = "My_Shared_Pref";
// To Write
SharedPreferences preferences = getSharedPreferences(pref_name, MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(encrypt("password"), encrypt("my_dummy_pass"));
editor.apply(); // Or commit if targeting old devices
// To Read
SharedPreferences preferences = getSharedPreferences(pref_name, MODE_PRIVATE);
String passEncrypted = preferences.getString(encrypt("password"), encrypt("default_value"));
String password = decrypt(passEncrypted);