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

Wie kann ich Passwörter mit PBKDF2 sicher hashen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-23 12:22:09659Durchsuche

How Can I Securely Hash Passwords Using PBKDF2?

Passwortsicheres Hashing: Die vollständige Anleitung

Die sichere Speicherung von Passwörtern ist für die Wahrung der Privatsphäre und Sicherheit der Benutzer von entscheidender Bedeutung. Auch wenn die Verschlüsselung wie eine einfache Lösung erscheint, ist sie für diesen Zweck nicht die ideale Methode. Hashing hingegen ist die bevorzugte Methode zur sicheren Speicherung von Passwörtern.

Schritt-für-Schritt-Passwort-Hashing-Prozess

Schritt 1: Salzwert generieren

Erstellen Sie zunächst einen zufälligen Salt (eindeutigen Wert) mit einem kryptografisch sicheren Pseudozufallszahlengenerator (PRNG):

<code class="language-c#">byte[] salt;
new RNGCryptoServiceProvider().GetBytes(salt = new byte[16]);</code>

Schritt 2: Hash-Passwort

Als nächstes initialisieren Sie den PBKDF2-Algorithmus (Password-Based Key Derivation Function 2):

<code class="language-c#">var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000);
byte[] hash = pbkdf2.GetBytes(20);</code>

Schritt 3: Salz und Haschisch vermischen

Salt- und Passwort-Hash-Bytes für die spätere Verwendung kombinieren:

<code class="language-c#">byte[] hashBytes = new byte[36];
Array.Copy(salt, 0, hashBytes, 0, 16);
Array.Copy(hash, 0, hashBytes, 16, 20);</code>

Schritt 4: Für die Speicherung kodieren

Konvertieren Sie den kombinierten Salt- und Hash-Wert zur sicheren Speicherung in einen Base64-String:

<code class="language-c#">string savedPasswordHash = Convert.ToBase64String(hashBytes);</code>

Schritt 5: Passwort bestätigen

Um das vom Benutzer eingegebene Passwort mit dem gespeicherten Hash zu vergleichen, rufen Sie den gespeicherten Hash ab:

<code class="language-c#">/* 获取存储的值 */
string savedPasswordHash = DBContext.GetUser(u => u.UserName == user).Password;</code>

Bytes und Salt extrahieren:

<code class="language-c#">/* 提取字节 */
byte[] hashBytes = Convert.FromBase64String(savedPasswordHash);
/* 获取盐值 */
byte[] salt = new byte[16];
Array.Copy(hashBytes, 0, salt, 0, 16);</code>

Berechnen Sie den Hash-Wert des vom Benutzer eingegebenen Passworts:

<code class="language-c#">var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000);
byte[] hash = pbkdf2.GetBytes(20);</code>

Vergleichsergebnisse:

<code class="language-c#">/* 比较结果 */
for (int i=0; i < 20; i++)
    if (hashBytes[i+16] != hash[i])
        throw new UnauthorizedAccessException();</code>

Indem Sie diese Schritte befolgen, können Sie Passwörter für Ihre Anwendungen effizient und sicher hashen.

Das obige ist der detaillierte Inhalt vonWie kann ich Passwörter 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