Ich erstelle eine kleine C# WinForms-Anwendung, habe aber Probleme mit der Verifizierung/Authentifizierung eines Hash-Passworts.Authenticate Hash Password
Wenn der Benutzer erstellt wird, wird sein Kennwort gehasht und in der Datenbank gespeichert. Ich weiß nicht, wie man das eingegebene Passwort (wenn sich der Benutzer anmeldet) mit dem Hash-Passwort in der Datenbank vergleicht.
Der Code den Hash zu erstellen, ist unten:
private static string CreateHashedPassword(string username, string plainTextPassword)
{
byte[] salt;
new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(salt = new byte[16]);
System.Security.Cryptography.Rfc2898DeriveBytes pbkdf2 = new System.Security.Cryptography.Rfc2898DeriveBytes(plainTextPassword, salt, 3000);
byte[] hash = pbkdf2.GetBytes(20);
byte[] hashBytes = new byte[36];
Array.Copy(salt, 0, hashBytes, 0, 16);
Array.Copy(hash, 0, hashBytes, 16, 20);
return Convert.ToBase64String(hashBytes);
}
Wenn der Benutzer anmelden möchte, habe ich diese Methode aufrufen, erneut das Hash-Passwort zu bekommen für die Datenbank zu vergleichen, aber es passt nicht.
Ich bin ich ziemlich sicher, das ist, weil ein neues Salz jedes Mal erstellt wird das Verfahren ausgeführt wird, so dass ich bin mir ziemlich sicher, dass die Art und Weise, es zu beheben (aber ich weiß nicht, wie) ist entweder:
Speichern Sie das Salz in der Datenbank oder
Verwendung so etwas wie den Benutzernamen, das Salz zu erstellen. Dies ist die bevorzugte Methode, aber ich weiß nicht, wie man ein Salz aus einer vorgegebenen Zeichenfolge wie einem Benutzernamen ableitet.
Irgendwelche Gedanken/Hinweise? Vielen Dank!
Sie sind eine eigene Authentifizierung/Autorisierung von Grund auf neu zu machen oder verwenden Sie einige Bibliothek für diesen Zweck? –
Also welchen hast du implementiert und mit welchem Problem warst du konfrontiert? –
Hier ist ein Link zu der Dokumentation, wo ich eine vollständige Lösung für ein Passwort hashher/comparer mit pbkdf2 erstellt hatte: [Komplette Passwort-Hashing-Lösung mit Pbkdf2] (https://stackoverflow.com/documentation/c%23/2774/ Hash-Funktionen/15470/Complete-Passwort-Hashing-Lösung-mit-pbkdf2 # t = 20170611103527142945) – Igor