Android
Secure SharedPreferences
Recherche…
Introduction
Les préférences partagées sont des fichiers XML basés sur des valeurs-clés . Il se trouve sous / data / data / nom_package / shared_prefs / <filename.xml>.
Ainsi, un utilisateur disposant des privilèges root peut accéder à cet emplacement et peut modifier ses valeurs. Si vous souhaitez protéger des valeurs dans vos préférences partagées, vous pouvez écrire un mécanisme simple de chiffrement et de déchiffrement.
Vous devez savoir que les préférences partagées n'ont jamais été conçues pour être sécurisées, mais simplement pour conserver les données.
Syntaxe
- public static String encrypt (entrée de chaîne);
- public static String decrypt (entrée de chaîne);
Paramètres
Paramètre | Définition |
---|---|
contribution | Valeur de chaîne pour chiffrer ou déchiffrer. |
Remarques
Les préférences partagées n'ont jamais été conçues pour être sécurisées, c'est juste un moyen simple de conserver les données.
Ce n'est pas une bonne idée d'utiliser les préférences partagées pour stocker des informations critiques telles que les informations d'identification de l'utilisateur. Pour enregistrer les informations d'identification de l'utilisateur (telles que les mots de passe), vous devez utiliser d'autres méthodes telles que AccountManager
d'Android.
Sécuriser une préférence partagée
Codec Simple
Pour illustrer le principe de fonctionnement, nous pouvons utiliser le cryptage et le décryptage simples comme suit.
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));
}
Technique d'implémentation
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);