2016-04-23 14 views
0

メールサーバーに接続し、定期的に電子メールを取得する簡単なアプリケーションを作成しようとしています。私はAccountManager(http://developer.android.com/reference/android/.../AccountManager.html)と同様のもの(http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator/)のコーディング方法に関する素晴らしい記事を読んでいます。ユーザーとパスワードをAndroidに保存する方法は?

私の理解では、このソリューションは、サーバーによって返される認証トークンを処理する方法を提供します。しかし、POP3やExchange Active Syncのようなメールサーバーの場合は、ユーザー名とパスワードを入力する必要があり、認証トークンは限られています。

このシナリオのユーザー名とパスワードを安全に保存する方法はありますか?

+0

ストアパスワードを暗号化したローカルデータベースにユーザー名とパスワードを格納する最善の方法。 –

答えて

1

デフォルトでは、AccountManagerはどの暗号化方式でも保護されません。パスワードはプレーンテキストで保存されます。

一般に、機密データをAndroid搭載端末にローカルに保存することは、常に危険にさらされる可能性があります。ただし、ハッカーがアプリケーションの機密データを抽出するのをより困難にすることで、リスクを軽減できるオプションがいくつかあります。データを暗号化したら、一般的な問題は、暗号鍵を目立たないように隠す方法が必要なことです。 AndroidのKeystoreシステムがそれを手助けすることができます。

Androidキーストアシステムでは、秘密鍵をコンテナ に保存して、デバイスから抽出するのをより困難にすることができます。キーが のキーストアに格納されると、 秘密鍵の素材をエクスポート不可能なままにして、暗号操作に使用できます。

OphioのSecure-Preferencesライブラリをチェックすることをおすすめします。ライブラリでは、データを暗号化してSharedPreferencesに保存し、暗号化キーを暗号化するためのKeyStoreKeyGeneratorに抽象化しています。ローカルユーザーのパスワードを保存すると、次のようになります。

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(); 
} 

あなたはSharedPreferencesに保存した情報を保護の詳細についてはthis articleを見てみましょう。

関連する問題