.net Implementierung von bcrypt

116

Kennt jemand eine gute Implementierung von bcrypt, ich weiß, dass diese Frage schon einmal gestellt wurde, aber nur sehr wenig beantwortet wurde. Ich bin mir nicht sicher, ob ich nur eine Implementierung auswählen soll, die in Google auftaucht, und denke, dass ich sha256 möglicherweise besser im System.Security.Cryptography-Namespace verwenden kann, zumindest dann weiß ich, dass sie unterstützt wird! Was denkst du?

Gareth
quelle

Antworten:

58

Es hört sich so an, als ob Sie nach BCrypt.net suchen :

BCrypt.net ist eine Implementierung des auf Blowfish basierenden Passwort-Hashing-Codes von OpenBSD, der in "A Future-Adaptable Password Scheme" von Niels Provos und David Mazières beschrieben wird. Es ist ein direkter Port von jBCrypt von Damien Miller und wird daher unter derselben BSD-Lizenz veröffentlicht. Der Code ist vollständig verwaltet und sollte mit jeder Little-Endian-CLI-Implementierung funktionieren - er wurde mit Microsoft .NET und Mono getestet.

ine
quelle
Ja, das habe ich auch bei Google gefunden. Verwenden Sie es oder wissen Sie, ob es weit verbreitet ist?
Gareth
2
Der Grund, warum ich über die Verwendung von BCrypt nachgedacht habe, war der Artikel matasano.com/log/958/… , in dem behauptet wurde, BCrypt sei der richtige Weg.
Gareth
13
Ich wollte nur einen Hinweis hinzufügen, dass wenn Sie BCrypt.net unter Windows Server 2008 verwenden, Sie es anders als BCrypt.dll benennen müssen, da es sonst zu Konflikten mit der neuen Windows-API in Vista kommt, die Funktionen in einer 'bcrypt' aufruft. dll ', wenn Sie also Bcrypt.net als Bcrypt.dll in Ihrem Web-App-Bin / Verzeichnis haben, kann Windows die richtige DLL nicht finden und es treten einige kryptische Fehler auf.
Thelsdj
5
Hinweis: Der folgende Grund für die Verwendung von bCrypt (für Interessenten). codahale.com/how-to-safely-store-a-password
THEMSE
1
Artikel verschoben: chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow- tables-what-you-must-know-about-s.html
Code Silverback
25

BCrypt.Net scheint derzeit die beliebteste Bibliothek zu sein

http://bcrypt.codeplex.com/

Hier ist ein Beispiel für die Verwendung zum Hashing von Passwörtern:

[TestMethod]
    public void BCryptTest()
    {
        const string password = "PASSWORD";
        const int workFactor = 13;

        var start = DateTime.UtcNow;
        var hashed = BCrypt.Net.BCrypt.HashPassword(password, workFactor);
        var end = DateTime.UtcNow;

        Console.WriteLine("hash length is {0} chars", hashed.Length);
        Console.WriteLine("Processing time is {0} with workFactor {1}", end - start, workFactor);
        Console.WriteLine("Hashed password: {0} ", hashed);
        Console.WriteLine("correct password {0}", BCrypt.Net.BCrypt.Verify("PASSWORD", hashed));
        Console.WriteLine("incorrect password {0}", BCrypt.Net.BCrypt.Verify("PASSWORd", hashed));
    }

Beispielausgabe:

hash length is 60 chars
Processing time is 00:00:01.0020000 with workFactor 13
Hashed password: $2a$13$iBqdG7ENBABEargiyzGlTexPsmviF/qrFxUZB2zce7HKF6MoBNhEq 
correct password True
incorrect password False
Maksym Kozlenko
quelle
6

Ich brauchte eine BCrypt-Implementierung, um etwas von PostgreSQL (mit pg_crypto) nach SQLite (was nicht der Fall ist) zu verschieben, also schrieb ich meine eigene. Aus dieser Nachricht geht hervor, dass ich nicht der einzige bin, der dies benötigt. Ich habe beschlossen, eine Lizenz darauf zu legen und sie freizugeben. Die URL lautet:

http://zer7.com/software.php?page=cryptsharp

Die dahinter stehende Blowfish-Implementierung ist ein Port der gemeinfreien C-Implementierung von Bruce Schneier und auf allen offiziellen Testvektoren erfolgreich.

Der BCrypt-Code, den ich selbst geschrieben habe, basiert auf der Spezifikation. Ich habe auch ein PHP-Skript erstellt, das zufällige Passwörter der Länge 0 bis 100 generiert und salzt, krypt und in eine Testdatei ausgibt. Der C # -Code stimmt bisher zu 100% mit diesen überein. Sie können das Skript gerne verwenden und selbst testen.

Die Bibliothek enthält auch PBKDF2-Code, der für jeden HMAC im Gegensatz zur .Shet-Implementierung nur für SHA-1 funktioniert (heute hinzugefügt - ich beabsichtige, SCrypt bald in C # durchzuführen, und dies erfordert PBKDF2 mit HMAC-SHA256). Wenn Sie möchten, können Sie sich auch ein darauf basierendes Schema erstellen.

Zer
quelle
0

Falsche Antwort, siehe unten

Alle postfixierten "Cng" -Algorithmen (Cryptography Next Generation) im .Net Framework verwenden jetzt bcrypt. ZB SHA256Cng .


Tatsächlich bezieht sich die MS BCrypt (BestCrypt) nicht auf die auf der Blowfish-Chiffre basierende - danke, RobbyD, für den Kommentar.
Löscht die Antwort nicht, nur für den Fall, dass jemand anderes die gleiche Verwirrung stiftet.

Ioanna
quelle
1
BCrypt bezieht sich in diesem Zusammenhang auf einen Microsoft PR-Namen BestCrypt. Weitere Informationen finden Sie unter stackoverflow.com/questions/9711568/… .
RobbyD