Я вижу две возможности:
- Hash все пароли (! Вместе с солью) и хранить хэши в нормальной SQLite базы данных. Каждый раз, когда пользователь вводит пароль, вы генерируете хеш (с солью) и смотрите в базу данных, если есть математический хэш пароля. Если нет, пароль не был прав. Если да, вы можете посмотреть, какой из паролей соответствует, и перейти к правильной деятельности формы. Обратите внимание, что только один хеш должен выполняться, когда пользователь вводит пароль, поэтому вы можете использовать алгоритмы медленного хеширования.
- Храните пароли в (AES-) зашифрованной базе данных или в зашифрованном виде в обычной незашифрованной базе данных. Затем вы можете всегда вычислять форму хранимых паролей в виде простого текста для более простого сравнения. Этот подход имеет недостаток в том, что вам нужно будет хранить секрет (ключ или кодовую фразу) в своем приложении (или получать его с вашего сервера каждый раз), который легко получить путем декомпиляции - если это чувствительные пароли или вы защищаете конфиденциальные данные , это было бы нехорошо.
Я предпочел бы первую возможность. Кроме того, я бы не использовал обычный MD5 как алгоритм хэширования, но, по крайней мере, SHA-512 или, еще лучше, bcrypt. Вот хороший поток, объясняющий, почему и как это сделать на Android: Stackoverflow-Thread. В принципе, вы должны считать, что кто-то будет извлекать базу данных sqlite, и тогда очень легко найти слабые пароли (с помощью радужных таблиц), если бы были применены быстрые алгоритмы хэширования (например, MD5). Соли паролей действительно помогают, но только против google attacks. Хэши Bcrypt (+ соль!) Намного медленнее генерируют (что хорошо), делая даже слабые пароли, которые трудно взломать.
Что вы подразумеваете под "лучшим"? – Mat
Вы хотите знать, какое шифрование использовать? –