2010-06-10 6 views
8

Wir erstellen eine neue Website mithilfe des ASP.NET-Mitgliedschaftsanbieters für die Benutzerregistrierung und die Anmeldung. Unser altes System hat Benutzerkennwörter verschlüsselt, sodass wir sie bei Bedarf wiederherstellen konnten.Wie? Verschlüsseln und Entschlüsseln von Benutzermitgliedschaftskennwörtern in ASP.NET

Ich habe sehr viel Mühe herauszufinden, wenn es möglich ist, ASP.NET-Mitgliedschaft Funktionen zu verwenden, um das Passwort einfach zu verschlüsseln, wenn der Benutzer registriert und dann entschlüsseln, damit ich es sehen kann.

Dokumentation dafür ist wiehern nicht existent.

Ich kann Web.config so konfigurieren, dass Passwörter als verschlüsselt gespeichert werden ala passwordFormat = "Verschlüsselt" im Provider und Zuweisung eines ValidationKey im Rechnerschlüssel, aber es scheint, als würde das Passwort noch gehashed (obwohl es vielleicht ist nur gut verschlüsselt). So oder so kann ich nicht entscheiden, wie das Passwort bei Bedarf wiederhergestellt werden kann (bei uns).

Danke!

Antwort

10

Das Speichern von Kennwörtern im wiederherstellbaren Format ist eine sehr schlechte Idee. Wenn Sie sie wiederherstellen können, so kann jeder, der in Ihren Server einbricht.

Sie sind besser dran mit einem Standard-Hash + Salz-Ansatz und mit einem Passwort-Reset-Mechanismus, um den Fall zu behandeln, wo Benutzer ihr Passwort vergessen.

+0

Dies ist eine Möglichkeit. Es wäre sehr schlecht PR, wenn Kontoinformationen jemals herauskommen würden. – smdrager

+0

unterstützt der ASP.NET-Mitgliedschaftsanbieter standardmäßig keine verschlüsselten Kennwörter? Dies bedeutet, dass das Passwort in Hash-Text übertragen und in der db im Hash-Format gespeichert wird. Brauchst du mehr als das? – ryancrawcour

+1

Um zu verdeutlichen, ASP.NET-Mitgliedschaft unterstützt klare, hashed und verschlüsselte Formate out of the box. Hash ist die Standardeinstellung und ist nur eine Möglichkeit (die beste für die meisten Situationen). Verschlüsselt ermöglicht die Entschlüsselung des Passwortes. – pdavis

0

Ich nehme an, Sie verwenden die SQLMembershipProvider, die MS liefert. Wenn ja, warum nicht die integrierte Frage- und Antwortfunktion verwenden, damit der Benutzer sein Passwort zurücksetzen kann. Alternativ (oder zusätzlich) setzen Sie ihr Passwort für sie zurück und mailen Sie das neue an sie. Auf diese Weise kann Ihre App das Passwort eines Benutzers nicht versehentlich offenlegen.

Wenn Sie wirklich ihre Kennwörter entschlüsseln müssen, muss das KennwortFormat auf "Verschlüsselt" gesetzt werden. Informationen zum Entschlüsseln des Kennworts finden Sie unter DecryptPassword. Weitere Informationen zum Konfigurieren der Entschlüsselung finden Sie unter PasswordFormat. Beachten Sie, dass Sie angeben müssen, dass das Attribut decryptionKey des Elements machineKey angegeben werden muss.

+0

Ich kenne DecryptPassword, aber ich kann VWD2010 nicht als eine Methode erkennen. Egal, welche Referenzen ich anbiete oder welche Namespaces ich verwende. Irgendeine Idee warum das der Fall ist? – smdrager

+0

Versuchen Sie, System.Web.Security.Membership.Default.DecryptPassword zu verwenden. DecryptPassword ist Teil der MembershipProvider-Klassensignatur und muss daher vorhanden sein. Beachten Sie, dass System.Web.Security.Membership eine statische Klasse ist, die nicht die gleichen Methoden wie die implementierenden Klassen verfügbar macht. –

1
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

Dim _bytes() Als Byte = DecryptPassword (_encodedPassword) Geben Sie einen Fehler kann nicht DecryptPassword finden – AMH

+0

[Link] (http://msdn.microsoft.com/en-us/library/system.web.security.membershipprovider.decryptpassword.aspx) DecryptPassword MSDN – rob

Verwandte Themen