Android
Veilige SharedPreferences
Zoeken…
Invoering
Gedeelde voorkeuren zijn op sleutelwaarde gebaseerde XML-bestanden . Het bevindt zich onder /data/data/package_name/shared_prefs/<filename.xml>
.
Dus een gebruiker met rootrechten kan naar deze locatie navigeren en de waarden ervan wijzigen. Als u waarden in uw gedeelde voorkeuren wilt beschermen, kunt u een eenvoudig coderings- en decoderingsmechanisme schrijven.
Je moet weten dat gedeelde voorkeuren nooit zijn gebouwd om veilig te zijn, het is gewoon een eenvoudige manier om gegevens te bewaren.
Syntaxis
- public static String encrypt (String-invoer);
- public static String-decodering (string-invoer);
parameters
Parameter | Definitie |
---|---|
invoer | Tekenreekswaarde om te coderen of te decoderen. |
Opmerkingen
Gedeelde voorkeuren zijn nooit gebouwd om veilig te zijn, het is gewoon een eenvoudige manier om gegevens te bewaren.
Het is geen goed idee om gedeelde voorkeuren te gebruiken voor het opslaan van kritieke informatie zoals gebruikersreferenties. Om gebruikersreferenties (zoals wachtwoorden) op te slaan, moet u andere methoden gebruiken, zoals AccountManager
Android.
Een gedeelde voorkeur beveiligen
Eenvoudige codec
Om het werkingsprincipe te illustreren, kunnen we eenvoudige codering en decodering als volgt gebruiken.
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));
}
Implementatietechniek
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);