Обеспечить 4-контактную защиту паролем приложения для Android

Я хотел бы добавить 4-контактную защиту паролем в мое приложение для Android, что-то вроде приложения Evernote. У пользователя должна быть возможность включить или отключить защиту паролем. Но я понятия не имею, с чего начать...

  1. Макет: я хочу четыре поля, которые принимают только цифры. Возможно использование опции editText. Но я не совсем уверен насчет клавиатуры.

  2. Хранение пароля: сработает ли использование общих настроек?

  3. Как добавить опцию для сброса пароля? Должен ли я сделать небольшой веб-сервис для этого? Однако мое приложение не использует Интернет, больше похоже на калькулятор. Я использую sqLite для хранения данных.

    Может ли кто-нибудь проинформировать о шагах, которым я должен следовать? Мои вопросы могут быть глупыми, но я совершенно новый в Android и я беспомощен. Буду признателен за ваш ответ. Спасибо

1 ответ

Решение

Вам просто нужно два экрана, один для установки пароля, другой, который открывается каждый раз, когда пользователь открывает приложение

  1. На первом экране используйте четыре редактируемых текста по горизонтали с пользовательским фоном, которые сделают их прямоугольными по форме (один из примеров), установите тип ввода "numberPassword", это откроет цифровую панель и примет пароли. Также ограничьте число символов в каждом тексте редактирования как 1. После того, как пользователь завершит ввод значения во всех текстах редактирования, объедините их.

    String pass= editText1.getText().toString()+editText2.getText().toString()+.. and so on
    

И хранить в общих настройках:

SharedPreference sp=getSharedPreference("password",pass);
  1. Сделайте ту же схему на втором экране, и когда пользователь закончит ввод значения, снова объедините все четыре и проверьте с тем, который вы сохранили в SharedPreference. Например:

    if(editText1.getText().toString()+editText2.getText().toString()
    +.. and so on).equals(sp.getString("password",""){
           //Intent to your main activity
      }
    
      else{
       Toast.makeText(getApplicationContext(),"Incorrect Password",Toast.LENGTH_LONG).show();
      }
    

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

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

Я использовал BCrypt, чтобы безопасно сохранить свой пин-код. Прост в обращении:

String hashpw=BCrypt(yourstring,BCrypt.gensalt());

Затем сохраните эту строку, как обычно, в ваших стриженных предпочтениях.

Для проверки / ввода пин-кода просто сделайте:

If(BCrypt.checkpw(inputString,yourSharedPreference)){
//open app
}
else{
//acces denied toast
}
Другие вопросы по тегам