Обеспечить 4-контактную защиту паролем приложения для Android
Я хотел бы добавить 4-контактную защиту паролем в мое приложение для Android, что-то вроде приложения Evernote. У пользователя должна быть возможность включить или отключить защиту паролем. Но я понятия не имею, с чего начать...
Макет: я хочу четыре поля, которые принимают только цифры. Возможно использование опции editText. Но я не совсем уверен насчет клавиатуры.
Хранение пароля: сработает ли использование общих настроек?
Как добавить опцию для сброса пароля? Должен ли я сделать небольшой веб-сервис для этого? Однако мое приложение не использует Интернет, больше похоже на калькулятор. Я использую sqLite для хранения данных.
Может ли кто-нибудь проинформировать о шагах, которым я должен следовать? Мои вопросы могут быть глупыми, но я совершенно новый в Android и я беспомощен. Буду признателен за ваш ответ. Спасибо
1 ответ
Вам просто нужно два экрана, один для установки пароля, другой, который открывается каждый раз, когда пользователь открывает приложение
На первом экране используйте четыре редактируемых текста по горизонтали с пользовательским фоном, которые сделают их прямоугольными по форме (один из примеров), установите тип ввода "numberPassword", это откроет цифровую панель и примет пароли. Также ограничьте число символов в каждом тексте редактирования как 1. После того, как пользователь завершит ввод значения во всех текстах редактирования, объедините их.
String pass= editText1.getText().toString()+editText2.getText().toString()+.. and so on
И хранить в общих настройках:
SharedPreference sp=getSharedPreference("password",pass);
Сделайте ту же схему на втором экране, и когда пользователь закончит ввод значения, снова объедините все четыре и проверьте с тем, который вы сохранили в 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
}