Heim >Backend-Entwicklung >C++ >Wie kann ich Passwörter mit PBKDF2 sicher hashen?
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!