2016-04-23 2 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 может помочь с этим.

Система Keystore Android позволяет хранить личные ключи в контейнере , чтобы сделать его сложнее извлечь из устройства. После того, как ключи находятся в хранилище ключей, они могут использоваться для криптографических операций с оставшимся неэкспортируемым личным материалом .

Я рекомендую проверить библиотеку Secure-Preferences Ophio. Библиотека предоставляет абстракцию для обфускации ваших данных перед ее хранением в 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(); 
} 

Взгляните на this article для получения дополнительной информации о защите информации вы сохраните в SharedPreferences.

Смежные вопросы