Как? Шифрование и расшифровка паролей пользователей ASP.NET
мы создаем новый сайт, используя ASP.NET поставщик членства для регистрации пользователя и входа в систему. Наша старая система зашифровала пароли пользователей, чтобы мы могли восстановить их, если понадобится.
У меня есть много проблем, выясняя, можно ли использовать ASP.NET функции членства, чтобы просто зашифровать пароль, когда пользователь регистрируется, а затем расшифровать его, чтобы я мог его видеть.
документация на это ржут несуществующим.
Я знаю, как для настройки Web.config, чтобы он хранил пароли как зашифрованные ala passwordFormat= "зашифровано" в провайдере и присвоение validationKey в machineKey, однако кажется, что пароль все еще хэшируется (хотя, возможно, он просто хорошо зашифрован). В любом случае я не могу расшифровать, как пароль может быть восстановлен (нами), если это необходимо.
спасибо!
4 ответов
хранение паролей в восстанавливаемом формате-очень плохая идея. Если вы можете восстановить их, так может любой, кто врывается в ваш сервер.
вам лучше использовать стандартный подход hash+salt и иметь механизм сброса пароля для обработки случая, когда пользователи забывают свой пароль.
вам нужно использовать passwordFormat= "Encrypted", а не passwordFormat="Hashed". Тогда вы можете использовать DecryptPassword метод MembershipProvider для расшифровки пароля при необходимости.
Imports System.Web.Security
Public Class PasswordRecovery
Inherits SqlMembershipProvider
Public Function GetDecryptedPassword(ByVal password As String) As String
Try
Dim _encodedPassword() As Byte = Convert.FromBase64String(password)
Dim _bytes() As Byte = DecryptPassword(_encodedPassword)
If _bytes Is Nothing Then
Return ""
Else
Return System.Text.Encoding.Unicode.GetString(_bytes, &H10, _bytes.Length - &H10)
End If
Catch ex As Exception
Throw New Exception("Error decrypting password.", ex)
End Try
End Function
End Class
Я предполагаю, что вы используете объекта sqlmembershipprovider что MS поставляет. Если да, то почему бы не использовать встроенные функции вопросов и ответов, чтобы позволить пользователю сбросить свой пароль. В качестве альтернативы (или дополнительно) сбросьте свой пароль для них и напишите им новый. Таким образом, ваше приложение не может случайно предоставить пароль пользователя кому-либо.
Если вам действительно нужно расшифровать их пароли, то passwordFormat должен быть установлен в "зашифрованный". Видеть DecryptPassword для получения информации о расшифровке пароля. Подробнее о том, как настроить расшифровку, см. В разделе PasswordFormat, обратите внимание, что в нем говорится, что вы должны указать атрибут decryptionKey элемента machineKey.