#android #encryption
#Android #шифрование
Вопрос:
Я использую общую библиотеку шифрования для Android, как указано в этой ссылке:http://www.androidsnippets.com/encryptdecrypt-strings
Как мне зашифровать «мастер-пароль», в настоящее время я жестко кодирую свой «мастер-пароль» в коде. Я боюсь, что кто-нибудь может перепроектировать мой код и найти «Мастер-пароль». С помощью этого они могут находить защищенные строки.
Пожалуйста, дайте мне знать, есть ли какой-либо стандартный обходной путь.
Комментарии:
1. «Фрагмент», который вы используете, сломан и может работать не на всех версиях Android, в частности на части генерации ключей. Используйте функцию получения ключа, чтобы получить ключ из пароля.
2. То, что я написал менее часа назад: «Это ужасные примеры, в них даже не указан полный алгоритм (и, вероятно, по умолчанию используется ECB, а не то, что вы хотите для файлов). Кроме того, он использует кодировку платформы вместо указанной кодировки для строки (.getBytes()). setSeed() НЕ генерирует один и тот же ключ каждый раз, он добавляет начальные байты в случайный пул. В довершение всего, они используют lingua, далекий от стандартного lingua, поэтому вы не можете ничего найти («ясно» вместо «просто»).»
Ответ №1:
Вы не должны жестко кодировать пароль, мастер он или нет, если система не предоставляет какой-либо защищенный контейнер.
Вы должны либо запрашивать мастер-пароль у пользователя при каждом запуске вашего приложения, либо вы можете временно кэшировать пароль в памяти.
Вы можете заставить приложение удалить пароль из памяти после того, как приложение простаивает в течение заранее определенного времени.
Кроме того, используйте функцию получения ключа, например PBKDF2
, для получения криптографически защищенного ключа из обычного текстового пароля.
Комментарии:
1. Существует ли обходной путь, позволяющий пользователям не вводить свой мастер-пароль каждый раз? Как приложение Twitter, Facebook или Gmail работает с OAUTH?
2. Я полагаю, что обходного пути нет. Пароль / ключ ДОЛЖЕН быть там для расшифровки. Если вы не хотите, чтобы пользователь вводил его каждый раз, я боюсь, вам нужно будет где-нибудь его сохранить. Что касается Twitter / GMail, я не совсем уверен, но AFAIK, они предоставляют какой-то токен стороннему приложению, который приложение может использовать для доступа к данным пользователя. Токен не содержит пароля пользователя. Единственный способ получить токен — попросить пользователя авторизовать приложение, которое в конечном итоге требует от пользователя входа в Gmail / Twitter, для которого, очевидно, нужен пароль.