Hash- und Salz-Passwörter in C #
War ich einfach nur durch eine DavidHayden Artikel auf Hashing Benutzer-Passwörter.
Wirklich ich kann nicht das bekommen, was er versucht zu erreichen.
Hier ist der code:
private static string CreateSalt(int size)
{
//Generate a cryptographic random number.
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] buff = new byte[size];
rng.GetBytes(buff);
//Return a Base64 string representation of the random number.
return Convert.ToBase64String(buff);
}
private static string CreatePasswordHash(string pwd, string salt)
{
string saltAndPwd = String.Concat(pwd, salt);
string hashedPwd =
FormsAuthentication.HashPasswordForStoringInConfigFile(
saltAndPwd, "sha1");
return hashedPwd;
}
Gibt es andere C# - Methode für das Hashen der Passwörter und die Zugabe von Salz zu?
InformationsquelleAutor der Frage Chendur Pandian | 2010-01-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich ist das irgendwie seltsam, mit der string-Konvertierungen - die Mitgliedschaft Anbieter hat Sie in die config-Dateien. Hashes und Salze sind binäre blobs, die Sie nicht brauchen, um Sie zu konvertieren strings, es sei denn, Sie wollen, um Sie in text-Dateien.
In meinem Buch, Anfang ASP.NET Sicherheit(oh endlich, eine Entschuldigung zu pimpen das Buch) ich mache folgenden
Salz generation ist, wie das Beispiel in der Frage. Sie können konvertieren von text in byte-arrays mit
Encoding.UTF8.GetBytes(string)
. Wenn Sie konvertieren müssen ein hash in seine Zeichenfolgendarstellung, die Sie verwenden könnenConvert.ToBase64String
undConvert.FromBase64String
zu konvertieren zurück.Sollten Sie beachten, dass Sie nicht mit dem Gleichheits-operator auf byte-arrays, es wird überprüft, Referenzen, und so sollten Sie einfach eine Schleife durch beide arrays prüfen jedes byte so
Immer verwenden Sie einen neuen salt pro Passwort. Salze müssen nicht geheim gehalten werden und kann gespeichert werden neben dem hash selbst.
InformationsquelleAutor der Antwort blowdart
Was blowdart gesagt, aber mit ein wenig weniger code. Verwenden von Linq oder
CopyTo
zu verketten arrays.Linq bietet eine einfache Möglichkeit für den Vergleich der byte-arrays zu.
Vor der Umsetzung dieser jedoch, check-out dieser Beitrag. Für die Passwort-hashing-möchten Sie vielleicht eine langsame hash-Algorithmus, der nicht einem schnellen.
Zu diesem Zweck gibt es die
Rfc2898DeriveBytes
- Klasse, die langsam (und langsamer), und die Antwort auf den zweiten Teil der ursprünglichen Frage, dass es dauern kann, ein Passwort und Salz und geben Sie einen hash. Sehen diese Frage für weitere Informationen. Beachten Sie, Stack Exchange ist mitRfc2898DeriveBytes
für das Passwort-hashing (source code hier).InformationsquelleAutor der Antwort Adam Boddington
Habe ich gelesen, dass Hash-Funktionen wie SHA256 waren nicht wirklich vorgesehen für den Einsatz mit Speicherung der Passwörter:
https://patrickmn.com/security/storing-passwords-securely/#notpasswordhashes
Statt adaptive Schlüssel-Ableitung Funktionen wie PBKDF2, bcrypt oder scrypt wurden. Hier ist ein PBKDF2 auf der Basis, dass Microsoft schrieb für PasswordHasher in Ihre Microsoft.AspNet.Identität Bibliothek:
Hinweis: dies erfordert Microsoft.AspNet.Die Kryptographie.KeyDerivation nuget-Paket installiert, die benötigt werden .NET 4.5.1 oder höher. Für frühere Versionen von .NET finden Sie in der Crypto - Klasse aus der Microsoft-System.Web.Helfer-Bibliothek.
Update Nov 2015
Aktualisierte Antwort zu verwenden, um eine Implementierung aus einem anderen Microsoft-Bibliothek, die verwendet PBKDF2-HMAC-SHA256-hashing statt PBKDF2-HMAC-SHA1 (Hinweis PBKDF2-HMAC-SHA1-Hash ist noch sicherer wenn iterCount ist hoch genug). Sie können sich die Quelle der vereinfachte code wurde kopiert aus als es tatsächlich behandelt zu validieren und zu aktualisieren hashes implementiert, die von der vorherigen Antwort, hilfreich, wenn Sie brauchen, um zu erhöhen iterCount in die Zukunft.
InformationsquelleAutor der Antwort Michael
Salz wird verwendet, um hinzufügen eine zusätzliche Ebene der Komplexität, wenn die hash-Werte, die es schwerer zu machen, um brute-force zu knacken.
Aus einer Artikel auf Sitepoint:
Gibt es keine Methode automatisch auf, dies zu tun .NET, also müssen Sie gehen mit der Lösung oben.
InformationsquelleAutor der Antwort Seb Nilsson
Bah, das ist besser! http://sourceforge.net/projects/pwdtknet/ und es ist besser, weil ..... es führt Key Stretching UND verwendet HMACSHA512 🙂
InformationsquelleAutor der Antwort thashiznets
Habe ich eine Bibliothek SimpleHashing.Netum den Prozess der Vermischung leicht mit basic-Klassen, die von Microsoft bereitgestellt. Gewöhnliche SHA ist nicht wirklich genug, um Passwörter sicher gespeichert mehr.
Die Bibliothek nutzen, die Idee der hash-format von Bcrypt, aber da es keine offizielle MS-Implementierung, die ich lieber verwenden, was verfügbar ist, in den Rahmen (z.B. PBKDF2), aber es ist ein bisschen zu hart out of the box.
Dies ist ein kurzes Beispiel, wie die Bibliothek zu benutzen:
InformationsquelleAutor der Antwort Ilya Chernomordik
Dies ist, wie ich es tun.. ich erstelle die Raute und speichern Sie mit der
ProtectedData
api:InformationsquelleAutor der Antwort JGU
Lese ich alle Antworten und ich denke, diejenigen, die genug, speziell @Michael Artikel mit langsamen Vermischung und @CodesInChaos gute Kommentare, aber ich beschlossen, zu teilen mein code-snippet für das hashing/Validierung, die nützlich sein können und es nicht erforderlich [Microsoft.AspNet.Die Kryptographie.KeyDerivation].
Bitte achten Sie SlowEquals so wichtige Funktion, Schließlich, ich hoffe, dies hilft und Bitte zögern Sie nicht, um mich beraten über bessere Ansätze.
InformationsquelleAutor der Antwort QMaster
Ich eine Klasse angelegt, die die folgende Methode:
Eingaben überprüfen
`
InformationsquelleAutor der Antwort Bamidele Alegbe
InformationsquelleAutor der Antwort ankush shukla
In Antwort auf diesen Teil der ursprünglichen Frage "gibt es andere C# - Methode für das Hashen der Passwörter" können Sie dies erreichen mit ASP.NET Identität v3.0 https://www.nuget.org/packages/Microsoft.AspNet.Identity.EntityFramework/3.0.0-rc1-final
InformationsquelleAutor der Antwort Dave Cornall
InformationsquelleAutor der Antwort ehsan