Heim >Backend-Entwicklung >C++ >Wie kann ich Passwörter in .NET mit PBKDF2 sicher hashen?

Wie kann ich Passwörter in .NET mit PBKDF2 sicher hashen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-23 12:32:12763Durchsuche

How to Securely Hash Passwords in .NET Using PBKDF2?

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:

  • Rufen Sie den gespeicherten Passwort-Hash aus der Datenbank ab.
  • Extrahieren Sie die Salt- und Hash-Bytes aus dem gespeicherten Hash-Wert.
  • Berechnen Sie einen neuen Hash anhand des vom Benutzer eingegebenen Passworts und des extrahierten Salt.
  • Vergleichen Sie den berechneten Hash mit dem gespeicherten Hash. Wenn sie übereinstimmen, ist das Passwort gültig.
<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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn