Android
Zabezpiecz współdzielone preferencje
Szukaj…
Wprowadzenie
Wspólne preferencje to pliki XML oparte na klucz-wartość . Znajduje się w / data / data / nazwa_pakietu / shared_prefs / <nazwa_pliku.xml>.
Użytkownik z uprawnieniami administratora może więc nawigować do tej lokalizacji i zmieniać jej wartości. Jeśli chcesz chronić wartości we wspólnych preferencjach, możesz napisać prosty mechanizm szyfrowania i deszyfrowania.
Powinieneś wiedzieć, że wspólne preferencje nigdy nie zostały zbudowane w celu zapewnienia bezpieczeństwa, to tylko prosty sposób na utrwalenie danych.
Składnia
- publiczny statyczny Szyfrowanie ciągu znaków (wejście ciągu);
- publiczny statyczny deszyfrowanie ciągu (wejście ciągu);
Parametry
Parametr | Definicja |
---|---|
Wejście | Wartość ciągu do zaszyfrowania lub odszyfrowania. |
Uwagi
Preferencje wspólne nigdy nie zostały stworzone w celu zapewnienia bezpieczeństwa, to tylko prosty sposób na utrwalenie danych.
Używanie wspólnych preferencji do przechowywania krytycznych informacji, takich jak poświadczenia użytkownika, nie jest dobrym pomysłem. Aby zapisać poświadczenia użytkownika (takie jak hasła), musisz użyć innych metod, takich jak AccountManager
Androida.
Zabezpieczanie wspólnych preferencji
Prosty kodek
Aby zilustrować zasadę działania, możemy zastosować proste szyfrowanie i deszyfrowanie w następujący sposób.
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));
}
Technika realizacji
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);