Android
Secure SharedPreferences
Ricerca…
introduzione
Le preferenze condivise sono file XML basati su valori-chiave . Si trova in /data/data/package_name/shared_prefs/<filename.xml>
.
Quindi un utente con privilegi di root può navigare in questa posizione e può cambiarne i valori. Se si desidera proteggere i valori nelle preferenze condivise, è possibile scrivere un semplice meccanismo di crittografia e decrittografia.
Dovresti sapere che le preferenze condivise non sono mai state create per essere sicure, è solo un modo semplice per conservare i dati.
Sintassi
- public static String encrypt (String input);
- public static String decrypt (String input);
Parametri
Parametro | Definizione |
---|---|
ingresso | Valore stringa da crittografare o decrittografare. |
Osservazioni
Le preferenze condivise non sono mai state create per essere sicure, è solo un modo semplice per mantenere i dati.
Non è una buona idea utilizzare le preferenze condivise per archiviare informazioni importanti come le credenziali dell'utente. Per salvare le credenziali dell'utente (come le password) è necessario utilizzare altri metodi come AccountManager
di Android.
Protezione di una preferenza condivisa
Semplice codec
Qui per illustrare il principio di funzionamento possiamo usare la crittografia e la decifrazione semplici come segue.
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));
}
Tecnica di implementazione
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);