2016-04-23 13 views
0

Ich versuche eine einfache App zu erstellen, die eine Verbindung zu einem Mail-Server herstellt und regelmäßig E-Mails abruft. Ich habe über AccountManager (http://developer.android.com/reference/android/.../AccountManager.html) und einen ausgezeichneten Artikel gelesen, wie man ein ähnliches Zeug (http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator/) kodiert.Wie man Benutzer/Passwort in Android speichert?

Nach meinem Verständnis bietet diese Lösung eine Möglichkeit, Authentifizierungstoken zu verarbeiten, die von einem Server zurückgegeben werden. Im Fall von Mailservern wie POP3 und Exchange Active Sync müssen wir jedoch Benutzernamen und Passwort bereitstellen, wenn wir mit ihnen sprechen, und Auth-Token sind von begrenztem Nutzen.

Gibt es eine Möglichkeit, den Benutzernamen und das Passwort für dieses Szenario sicher zu speichern?

+0

beste Möglichkeit zum Speichern von Benutzername und Passwort in der lokalen Datenbank mit Speicher-Passwort in verschlüsselter Form. –

Antwort

1

Beachten Sie, dass die AccountManager standardmäßig nicht durch eine Verschlüsselungsmethode geschützt ist. Die Passwörter sind dort im Klartext gespeichert.

Im Allgemeinen besteht die Gefahr, dass vertrauliche Daten lokal auf einem Android-Gerät gespeichert werden. Es stehen jedoch einige Optionen zur Verfügung, die Ihr Risiko verringern können, indem Hackern das Extrahieren sensibler Daten einer Anwendung erschwert wird. Nachdem Sie Ihre Daten verschlüsselt haben, besteht ein häufiges Problem darin, dass Sie Ihren Verschlüsselungsschlüssel dann aus dem Blickfeld entfernen müssen. Android Keystore System kann dabei helfen.

Mit dem Android Keystore-System können Sie private Schlüssel in einem Container speichern, um das Extrahieren aus dem Gerät zu erschweren. Sobald sich die Keys in befinden, können sie für kryptografische Operationen verwendet werden, wobei das private Schlüsselmaterial nicht exportierbar bleibt.

Ich empfehle Ophios Secure-Preferences Bibliothek auschecken. Die Bibliothek bietet eine Abstraktion, um Ihre Daten zu verschleiern, bevor Sie sie in SharedPreferences speichern, und eine KeyStoreKeyGenerator für die Verschlüsselung Ihres Verschlüsselungsschlüssels. Speichern eines Kennwort des Benutzers lokal könnte wie folgt aussehen:

private static void stashPassword(Application application, String password) { 
    String secretKey = null; 
    try { 
     secretKey = KeyStoreKeyGenerator.get(application, "KeyFilename") 
         .loadOrGenerateKeys(); 
    } catch (Exception exception) { 
     // handle error 
    } 

    SharedPreferences preferences = new ObscuredPreferencesBuilder() 
      .setApplication(application) 
      .obfuscateValue(true) 
      .obfuscateKey(true) 
      .setSharePrefFileName(PREFERENCES_NAME) 
      .setSecret(secretKey) 
      .createSharedPrefs(); 
    preferences.edit().putString(KEY_PASSWORD, password).apply(); 
} 

Werfen Sie einen Blick auf this article für weitere Informationen über die Sicherung der Informationen, die Sie in SharedPreferences speichern.

Verwandte Themen