Лучший способ сохранить имя пользователя и пароль в приложении для Android

Я разрабатываю приложение, в котором пользователю необходимо войти в систему для выполнения операций … но в основном на телефоне android phone ppl использовать «держать меня в записи» … и в этом случае мне нужно будет поддерживать значение имени пользователя и пароля в Мое приложение. Должен ли я использовать настройки или SQLite Db или есть что-то еще и как я могу сделать его безопасным? Помощь Plz … Спасибо заранее.

Solutions Collecting From Web of "Лучший способ сохранить имя пользователя и пароль в приложении для Android"

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

Одно из решений, которое я использовал некоторое время назад, – это заставить сервер генерировать «билет», который он передает обратно на устройство, что хорошо в течение определенного периода времени. Этот билет используется устройством для всей связи, используя SSL, поэтому люди не могут украсть ваш билет. Таким образом, пользователь один раз аутентифицирует свой пароль на сервере, сервер отправляет обратно истекающий билет, и пароль никогда не хранится нигде на устройстве.

Этот механизм использует несколько трехсторонних механизмов аутентификации, таких как OpenID, Facebook, даже API Google. Недостатком является то, что каждый раз, когда истекает срок действия билета, пользователь должен повторно войти в систему.

В конечном счете, это зависит от того, насколько безопасно вы хотите, чтобы ваше приложение было. Если это просто отличить пользователей, и никакая сверхсекретная информация не хранится, как банковские счета или типы крови, то, возможно, сохранение pwd в открытом тексте на устройстве просто отлично 🙂

Удачи, какой бы метод вы ни выбрали, лучше всего подходит для вашей конкретной ситуации!

Изменить: я должен отметить, что этот метод передает ответственность безопасности серверу – вы захотите использовать соленые хэши для сравнения паролей на сервере, идея, которую вы увидите в некоторых других комментариях по этому вопросу. Это предотвращает появление незашифрованного пароля в любом месте, кроме EditText View на устройстве, связь SSL с сервером и оперативную память сервера, когда он солит и хеширует пароль. Он никогда не хранится на диске, а это хорошая вещь ™.

Как говорили другие, нет надежного способа хранения пароля на Android, который полностью защищает данные. Хеширование / шифрование пароля – отличная идея, но все, что он сделает, это замедлить «взломщик».

С учетом сказанного это то, что я сделал:

1) Я использовал этот класс simplecryto.java который берет семя и текст и шифрует его. 2) Я использовал SharedPreferences в приватном режиме, который защищает сохраненный файл в SharedPreferences устройствах. 3) Семя, которое я использовал для simplecryto, представляет собой массив байтов, который немного сложнее найти декомпиляторами, чем String.

Моя заявка была недавно рассмотрена группой безопасности «белой шляпы», нанятой моей компанией. Они отметили эту проблему и указали, что я должен использовать OAUTH, но они также перечисляли ее как проблему с низким уровнем риска, что означает, что она невелика, но не настолько эффективна, чтобы предотвратить выпуск.

Помните, что «взломщик» должен будет иметь физический доступ к устройству и корень его И заботиться достаточно, чтобы найти семя.

Если вы действительно заботитесь о безопасности, не используйте параметр «Запомнить меня».

По крайней мере, сохраните его в SharedPreferences (частный режим) и не забывайте хэш -пароль. Хотя это не будет иметь особого значения для злоумышленника (или внедренного устройства), это что-то.

Самый безопасный способ сделать это без угрозы безопасности – использовать общие настройки, чтобы хранить ТОЛЬКО имя пользователя последнего пользователя для входа в систему.

Кроме того, в вашей таблице пользователей введите столбец, который содержит числовое логическое значение (1 или 0), чтобы указать, проверил ли человек человека флажок «запомнить меня» или нет.

При запуске приложения получите имя пользователя с помощью функции getSharedPreferences() и используйте его для запроса вашей размещенной базы данных, чтобы увидеть, является ли столбец signedin равным 1 или 0, где 1 указывает, что человек установил флажок «запомнить меня».

  //encode password pass_word_et = (EditText) v.findViewById(R.id.password_et); String pwd = pass_word_et.getText().toString(); byte[] data = new byte[0]; try { data = pwd.getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } String base64 = Base64.encodeToString(data, Base64.DEFAULT); hbha_pref_helper.saveStringValue("pass_word", base64); //decode password String base64=hbha_pref_helper.getStringValue("pass_word"); byte[] data = Base64.decode(base64, Base64.DEFAULT); String decrypt_pwd=""; try { decrypt_pwd = new String(data, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }