implementacja bcrypt .net

116

Czy ktoś wie o dobrej implementacji bcrypt, wiem, że to pytanie zostało zadane wcześniej, ale otrzymało bardzo mało odpowiedzi. Nie jestem pewien, czy po prostu wybrać implementację, która pojawia się w google i myślę, że może lepiej będzie, jeśli użyję sha256 w przestrzeni nazw System.Security.Cryptography, przynajmniej wtedy wiem, że jest obsługiwana! O czym myślisz?

Gareth
źródło

Odpowiedzi:

58

Wygląda na to, że szukasz BCrypt.net :

BCrypt.net jest implementacją opartego na Blowfish kodu haszującego hasła OpenBSD, opisanego w „A Future-Adaptable Password Scheme” autorstwa Nielsa Provosa i Davida Mazières. Jest to bezpośredni port jBCrypt autorstwa Damiena Millera i dlatego jest udostępniany na tej samej licencji w stylu BSD. Kod jest w pełni zarządzany i powinien działać z każdą implementacją interfejsu CLI little-endian - został przetestowany z Microsoft .NET i Mono.

ine
źródło
Tak, to też znalazłem w Google. Używasz go, czy wiesz, czy jest szeroko stosowany?
Gareth
2
Powodem, dla którego myślałem o użyciu BCrypt był ten artykuł matasano.com/log/958/ ... i stwierdził, że BCrypt jest drogą do zrobienia.
Gareth
13
Chciałem tylko dodać uwagę, że jeśli korzystasz z BCrypt.net w systemie Windows Server 2008, musisz nadać mu inną nazwę niż BCrypt.dll, w przeciwnym razie wystąpi konflikt z nowym interfejsem API systemu Windows w systemie Vista, który wywołuje funkcje w pliku „bcrypt”. dll ', więc jeśli masz Bcrypt.net jako Bcrypt.dll w katalogu bin / katalogu aplikacji internetowej, system Windows nie będzie w stanie znaleźć właściwej biblioteki dll i pojawią się tajemnicze błędy.
thelsdj
5
Uwaga: Poniższy powód, dla którego warto używać bCrypt (dla zainteresowanych). codahale.com/how-to-safely-store-a-password
thames
1
Artykuł przeniesiony: chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow- table-what-you-need-to-know-about-s.html
Code Silverback
25

BCrypt.Net wydaje się być obecnie najpopularniejszą biblioteką

http://bcrypt.codeplex.com/

Oto przykład, jak go używać do haszowania hasła:

[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));
    }

Przykładowe dane wyjściowe:

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
źródło
6

Potrzebowałem implementacji BCrypt podczas przenoszenia czegoś z PostgreSQL (który ma pg_crypto) do SQLite (który nie ma), więc napisałem własną. Widząc z tej wiadomości, nie tylko ja tego potrzebuję, zdecydowałem się nałożyć na nią licencję i zwolnić ją. Adres URL to:

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

Implementacja Blowfish, która za tym stoi, jest portem implementacji C Bruce'a Schneiera w domenie publicznej i działa poprawnie na wszystkich oficjalnych wektorach testowych.

Kod BCrypt, który sam napisałem na podstawie specyfikacji. Stworzyłem również skrypt PHP, który generuje losowe hasła o długości od 0 do 100 i soli, szyfruje je i wysyła do pliku testowego. Kod C # pasuje do tych 100% do tej pory. Zapraszamy do skorzystania ze skryptu i przetestowania go samodzielnie.

Biblioteka zawiera również kod PBKDF2, który działa dla dowolnego HMAC w przeciwieństwie do implementacji tylko SHA-1 .Net (dodane dzisiaj - zamierzam wkrótce zrobić SCrypt w C # i to wymaga PBKDF2 z HMAC-SHA256). Jeśli chcesz, możesz stworzyć własny schemat na tej podstawie.

Zer
źródło
0

Błędna odpowiedź, zobacz poniżej

Wszystkie postfixowane algorytmy "Cng" (Cryptography Next Generation) w .Net Framework używają teraz bcrypt. Np . SHA256Cng .


Właściwie MS BCrypt (BestCrypt) nie odnosi się do tego opartego na szyfrze Blowfish - dziękuję RobbyD za komentarz.
Nie usunie odpowiedzi, na wypadek gdyby ktoś inny wprowadził takie samo zamieszanie.

Ioanna
źródło
1
BCrypt w tym kontekście odnosi się do nazwy Microsoft PR BestCrypt. Więcej szczegółów znajdziesz na stackoverflow.com/questions/9711568/… .
RobbyD