Мы создаем новый сайт с помощью поставщика членства ASP.NET для регистрации пользователя и входим в систему. Наша старая система зашифровала пароли пользователя так, чтобы мы могли восстановить их, если бы мы должны были.
Я испытываю много затруднений, выясняющих, возможно ли использовать функции принадлежности ASP.NET для простого шифрования пароля, когда пользователь регистрируется, и затем не зашифруйте его так, я вижу его.
Документация для этого является несуществующим ржанием.
Я знаю, как настроить Web.config, чтобы иметь его пароли хранилища как зашифрованное крыло passwordFormat = "Зашифрованный" в поставщике и присвоении validationKey в machineKey, однако кажется, что пароль все еще хешируется (хотя, возможно, это просто хорошо шифруется). Так или иначе я не могу дешифровать, как пароль может быть восстановлен (нами), если необходимо.
Спасибо!
Хранить пароли в восстанавливаемом формате - очень плохая идея. Если вы можете восстановить их, то сможет и любой, кто взломает ваш сервер.
Лучше использовать стандартный подход хеш + соль и иметь механизм сброса пароля на случай, когда пользователи забывают свой пароль.
Вам нужно использовать passwordFormat = "Encrypted" вместо passwordFormat = "Hashed". Затем вы можете использовать метод DecryptPassword объекта MembershipProvider , чтобы при необходимости расшифровать пароль.
Я предполагаю, что вы используете SQLMembershipProvider , поставляемый MS. Если да, то почему бы не использовать встроенную функцию вопросов и ответов, чтобы пользователь мог сбросить свой пароль. В качестве альтернативы (или дополнительно) сбросьте для них их пароль и отправьте им новый пароль по электронной почте. Таким образом, ваше приложение не сможет случайно раскрыть кому-либо пароль пользователя.
Если вам действительно нужно расшифровать их пароли, тогда для параметра passwordFormat должно быть установлено значение «Зашифрованный». См. DecryptPassword для получения информации о расшифровке пароля. Для получения подробной информации о настройке расшифровки см. PasswordFormat , обратите внимание, что в нем говорится, что вы должны указать атрибут decryptionKey элемента machineKey.