Как?Шифровать и дешифровать пароли пользователей в ASP.NET - PullRequest
8 голосов
/ 10 июня 2010

Мы создаем новый сайт, используя членство в ASP.NET для регистрации пользователей и входа в систему. Наша старая система зашифровывала пароли пользователей, чтобы мы могли восстановить их, если нам нужно.

У меня отличноТрудно понять, можно ли использовать функции членства ASP.NET, чтобы просто зашифровать пароль при регистрации пользователя, а затем расшифровать его, чтобы я мог его увидеть.

Документация для этого не существует.

Я знаю, как настроить Web.config, чтобы он хранил пароли в зашифрованном виде. Ala passwordFormat = "Encrypted" в поставщике и присваивал ключ validationKey в machineKey, однако кажется, что пароль по-прежнему хешируется (хотя, возможно,это просто хорошо зашифровано).В любом случае я не могу определить, как пароль может быть восстановлен (нами) при необходимости.

Спасибо!

Ответы [ 4 ]

10 голосов
/ 10 июня 2010

Хранение паролей в восстанавливаемом формате - очень плохая идея.Если вы можете восстановить их, то любой может взломать ваш сервер.

Вам лучше использовать стандартный подход hash + salt и иметь механизм сброса пароля, чтобы справиться со случаем, когда пользователи забывают свой пароль.

5 голосов
/ 10 июня 2010

Вам нужно использовать passwordFormat = "Encrypted", а не passwordFormat = "Hashed".Затем вы можете использовать метод DecryptPassword для MembershipProvider для расшифровки пароля при необходимости.

1 голос
/ 30 ноября 2011
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
0 голосов
/ 10 июня 2010

Я предполагаю, что вы используете SQLMembershipProvider , который поставляет MS. Если так, то почему бы не использовать встроенную функцию вопросов и ответов, чтобы позволить пользователю сбросить свой пароль. В качестве альтернативы (или дополнительно) сбросьте их пароль и отправьте им новый. Таким образом, ваше приложение не может случайно раскрыть кому-либо пароль пользователя.

Если вам действительно нужно расшифровать их пароли, то для passwordFormat должно быть установлено значение «Зашифровано». См. DecryptPassword для получения информации о расшифровке пароля. Для получения подробной информации о том, как настроить дешифрование, смотрите PasswordFormat , обратите внимание, что в нем говорится, что вы должны указать атрибут decryptionKey элемента machineKey.

...