Хранение пароля
Я создаю приложение для хранения зашифрованных данных.
В этом вопрос OP si рекомендует хранить учетные данные пользователя в явном виде.
Но что, если я хотел бы сохранить зашифрованный пароль, созданный с помощью SecretKeySpec (тот, который используется для шифрования данных)? По моему мнению, секретный ключ сам зашифрован.
Поэтому я могу сохранить и загрузить его.
Примечание. Я не спрашиваю, как хранить настройки, только если мое понимание того, как SecretKeySpec работает и как это сделать, сортировать, сериализовывать и извлекать зашифрованный пароль.
EDIT: Извините, я забыл указать, что он должен быть совместим с уровнем API 4.
Ответы
Ответ 1
Прямо от веб-сайта разработчика .
Будьте уверены в безопасности!
Важно понимать, что AccountManager не является службой шифрования или цепочкой ключей. Он хранит учетные данные так же, как вы их передаете, в виде обычного текста. На большинстве устройств это не вызывает особой озабоченности, поскольку хранит их в базе данных, доступной только для root. Но на корневом устройстве учетные данные будут доступны для чтения любому, у кого есть доступ к устройству adb.
С учетом этого вы не должны передавать фактический пароль пользователя в AccountManager.addAccountExplicitly(). Вместо этого вы должны хранить криптографически безопасный токен, который будет ограниченным использованием злоумышленника. Если ваши учетные данные пользователя защищают что-то ценное, вы должны тщательно рассмотреть возможность сделать что-то подобное.
Помните: когда дело доходит до кода безопасности, следуйте правилу "Mythbusters": не пытайтесь это делать дома! Перед внедрением любого пользовательского кода учетной записи обратитесь к специалисту по безопасности.
Теперь, когда оговорки о безопасности не работают, пришло время вернуться к работе. Вы уже внедрили мясо своего пользовательского кода учетной записи; что осталось от сантехники.
Ответ 2
Ого. Я действительно не думаю, что сохранение пароля пользователя в явном виде является серьезным вариантом.
Отметьте AccountManager, который был разработан для этой цели. Несмотря на то, что он был включен в вопрос, к которому вы привязались, SampleSyncAdapter действительно является хорошим ресурсом для примера AccountManager
, и только один я знать о включенных в SDK.
Изменить - около javax.crypto
, я думаю, что это API более низкого уровня, чем AccountManager
. Из документов:
Многие серверы поддерживают некоторое понятие токен аутентификации, который может быть используется для аутентификации запроса на сервера без отправки фактический пароль. (Токены Auth обычно создаются с помощью отдельного запрос, который включает в себя учетные данные.) AccountManager может генерировать токены для приложений, поэтому приложение не нуждается в обрабатывать пароли напрямую. Аутентификаторы обычно можно повторно использовать и кэшировать AccountManager, но должен быть обновлен периодически. Это ответственность приложений для аннулирования авторизации когда они перестают работать, поэтому AccountManager знает, что он должен регенерировать их.
Мне бы не хотелось иметь дело с этим на уровне javax.crypto, если бы мне не пришлось.
Ответ 3
u может просто объявить как имя пользователя, так и пароль в качестве оператора if, если условие соответствует u, может начать действие в случае неправильного u, может просто сгенерировать тост неправильного ввода. Но u не может отменить пароль оттуда, если u потерян любым но yess u может создавать много паролей для одного пользователя. Я добавил эту вещь в свое приложение и хорошо работал у меня.