Heim >Backend-Entwicklung >C++ >Wie kann ich Passwörter in .NET mit PBKDF2 sicher hashen?
Verwenden Sie aktuelle Best Practices, um Passwörter in .NET sicher zu hashen
Beim Speichern von Passwörtern in einer Datenbank ist es wichtig, vertrauliche Informationen mithilfe von Hashing-Algorithmen zu schützen. Verschlüsselungsverfahren sind hierfür nicht geeignet. Der beste native Passwort-Hashing-Algorithmus in .NET ist PBKDF2 (Password-Based Key Derivation Function 2).
Schritt-für-Schritt-Anleitung zum Passwort-Hashing mit PBKDF2
Schritt 1: Salzwert generieren
Der Salt ist ein Zufallswert, der verwendet wird, um den Hash jedes Passworts einzigartig zu machen. Erstellen Sie einen Salt-Wert mit einem kryptografischen PRNG (Pseudozufallszahlengenerator):
<code class="language-csharp">byte[] salt; new RNGCryptoServiceProvider().GetBytes(salt = new byte[16]);</code>
Schritt 2: PBKDF2-Objekt erstellen und Hash-Wert berechnen
Instanziieren Sie die Klasse Rfc2898DeriveBytes
und geben Sie das Passwort, Salt und die gewünschte Anzahl von Iterationen (~100.000 empfohlen) an:
<code class="language-csharp">var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000); byte[] hash = pbkdf2.GetBytes(20);</code>
Schritt 3: Kombinieren Sie Salz- und Chiffrierbytes zur Speicherung
Kombinieren Sie die Salt- und Passwort-Bytes, um eine einzelne Zeichenfolge für die Datenbankspeicherung zu erstellen:
<code class="language-csharp">byte[] hashBytes = new byte[36]; Array.Copy(salt, 0, hashBytes, 0, 16); Array.Copy(hash, 0, hashBytes, 16, 20);</code>
Schritt 4: Zur Speicherung in einen Base64-String konvertieren
Kodieren Sie die kombinierten Bytes in einen Base64-String zur Speicherung in der Datenbank:
<code class="language-csharp">string savedPasswordHash = Convert.ToBase64String(hashBytes);</code>
Schritt 5: Überprüfen Sie das vom Benutzer eingegebene Passwort
Um zu überprüfen, ob das vom Benutzer eingegebene Passwort mit dem gespeicherten Hash übereinstimmt:
<code class="language-csharp">string savedPasswordHash = DBContext.GetUser(u => u.UserName == user).Password; byte[] hashBytes = Convert.FromBase64String(savedPasswordHash); byte[] salt = new byte[16]; Array.Copy(hashBytes, 0, salt, 0, 16); var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000); byte[] hash = pbkdf2.GetBytes(20); for (int i=0; i < 20; i++) if (hashBytes[i+16] != hash[i]) throw new UnauthorizedAccessException();</code>
Hinweis: Die Anzahl der Iterationen kann basierend auf den Leistungsanforderungen der Anwendung angepasst werden. Ein allgemein empfohlener Mindestwert ist 10.000.
Das obige ist der detaillierte Inhalt vonWie kann ich Passwörter in .NET mit PBKDF2 sicher hashen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!