Android
Sichere SharedPreferences
Suche…
Einführung
Gemeinsame Einstellungen sind auf Schlüsselwerten basierende XML-Dateien . Es befindet sich unter /data/data/package_name/shared_prefs/<filename.xml>
.
So kann ein Benutzer mit root-Berechtigungen zu diesem Speicherort navigieren und seine Werte ändern. Wenn Sie die Werte in Ihren gemeinsamen Einstellungen schützen möchten, können Sie einen einfachen Verschlüsselungs- und Entschlüsselungsmechanismus schreiben.
Sie sollten wissen, dass Shared Preferences niemals sicher erstellt wurden. Es ist nur eine einfache Methode, um Daten zu speichern.
Syntax
- public static String encrypt (String-Eingabe);
- public static String decrypt (Zeicheneingabe);
Parameter
Parameter | Definition |
---|---|
Eingang | Stringwert zum Verschlüsseln oder Entschlüsseln. |
Bemerkungen
Gemeinsame Einstellungen wurden nie als sicher erstellt, es ist nur eine einfache Methode, um Daten zu erhalten.
Es ist keine gute Idee, gemeinsam genutzte Voreinstellungen zum Speichern kritischer Informationen wie Benutzeranmeldeinformationen zu verwenden. Um Benutzeranmeldeinformationen (z. B. Kennwörter) zu speichern, müssen Sie andere Methoden verwenden, beispielsweise den AccountManager
Android.
Sichern einer gemeinsamen Einstellung
Einfacher Codec
Um das Funktionsprinzip zu veranschaulichen, können wir die einfache Ver- und Entschlüsselung wie folgt verwenden.
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));
}
Implementierungstechnik
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);