SHA-256 на стороне базы данных
Я делаю мобильное приложение для сериалов. В основном, как трекер, чтобы знать, какие эпизоды смотреть и когда. И я хотел хранить информацию, такую как просмотренные эпизоды, показы пользователей, в базе данных. (информация о выставках, которые я получаю от остальных API)
Так что дело в том, что я не вижу здесь необходимости в сервере, я просто не знаю, что он должен делать.
И проблема в том, что я хотел бы сделать базу данных безопасной. И из того, что я прочитал, лучшая практика заключается в создании соли с использованием криптографически сильного генератора случайных чисел, добавлении его к паролю и последующем хешировании с использованием алгоритма хеширования, например, SHA-256. Затем я сохраняю хешированный пароль и соль в базе данных, и когда я хочу проверить, верен ли пароль, просто хэшируйте его снова и сравнивайте с паролем в базе данных.
Так что у меня есть специальный класс в Java, который может создать такую соль, и все, что мне нужно было знать, это где и как хэшировать все это. И о чем я спрашиваю. Я не хотел бы создавать сервер, который будет просто хэшировать пароли.
Еще одна вещь - как реализовать автоматический вход в систему, который я тоже хотел добавить, как только понял это.
Надеюсь, теперь стало понятнее, чего я хочу достичь здесь.
1 ответ
Похоже, вы создаете мобильное приложение, которое стоит отдельно, т.е. не общается с сервером.
Вы хотите, чтобы приложение было защищено паролем (даже если их телефон уже есть), и вы хотите сохранить этот хэшированный пароль, чтобы pwd не мог быть восстановлен, например, на потерянном, а затем укоренившемся телефоне.
SHA256 - это хороший хеш, но вам нужен действительно медленный хеш. Используйте bcrypt, PBKDF2 или scrypt.
Соль не секрет.
Когда пользователь создает свою учетную запись, создайте соль, хешите pwd с солью и сохраните где-нибудь пароль и соль. Каждый раз, когда пользователь входит в систему, получает соль, хэширует пароль, как и прежде, и сравнивает с сохраненным паролем. Если то же самое, пользователь аутентифицируется.
Вам не нужно хранить pwd в sqlite. Вероятно, проще просто сохранить его в текстовом файле.