bcrypt'in .net uygulaması


116

İyi bir bcrypt uygulamasını bilen var mı, bu sorunun daha önce sorulduğunu biliyorum ama çok az yanıt aldı. Google'da ortaya çıkan bir uygulamayı seçmek konusunda biraz emin değilim ve sha256'yı System.Security.Cryptography ad alanında kullanmanın daha iyi olabileceğini düşünüyorum, en azından o zaman desteklendiğini biliyorum! Ne düşünüyorsun

Yanıtlar:


58

BCrypt.net'i arıyormuşsunuz gibi geliyor :

BCrypt.net, Niels Provos ve David Mazières'in "Geleceğe Uyarlanabilir Bir Parola Şeması" nda açıklanan, OpenBSD'nin Blowfish tabanlı parola karma kodunun bir uygulamasıdır. Damien Miller tarafından jBCrypt'in doğrudan bir limanıdır ve bu nedenle aynı BSD tarzı lisans altında piyasaya sürülür. Kod tam olarak yönetilir ve herhangi bir küçük CLI uygulamasıyla çalışmalıdır - Microsoft .NET ve Mono ile test edilmiştir.


Evet, Google'da da bulduğum oydu. Kullanıyor musunuz yoksa yaygın olarak kullanılıp kullanılmadığını biliyor musunuz?
Gareth

2
BCrypt'i kullanmayı düşünmemin nedeni bu makale matasano.com/log/958/… idi ve BCrypt'in gidilecek yol olduğunu iddia etti.
Gareth

13
Yalnızca, Windows Server 2008'de BCrypt.net kullanıyorsanız, ona BCrypt.dll dışında bir ad vermeniz gerekeceğine veya bir 'bcrypt'de işlevleri çağıran Vista'daki yeni Windows API ile çakışacağına dikkat çekmek istedim. dll ', yani web uygulamanızın bin / dizininde Bcrypt.dll olarak Bcrypt.net varsa, Windows doğru dll'yi bulamayacak ve bazı şifreleme hataları alacaksınız.
thelsdj

5
Not: bCrypt'in neden kullanılacağına ilişkin aşağıdaki neden (ilgilenenler için). codahale.com/how-to-safely-store-a-password
thames

1
Makale taşındı: chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow- tables-what-you-need-about-s.html
Code Silverback

25

BCrypt.Net şu anda en popüler kütüphane gibi görünüyor

http://bcrypt.codeplex.com/

Parola hashing için nasıl kullanılacağına dair bir örnek:

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

Örnek çıktı:

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


6

PostgreSQL'den (pg_crypto'ya sahip olan) SQLite'ye (ki yok) bir şeyi taşırken bir BCrypt uygulamasına ihtiyacım vardı, bu yüzden kendim yazdım. Bu mesajdan bakıldığında, buna ihtiyaç duyan tek kişi ben değilim, üzerine bir lisans tokatlamaya ve onu serbest bırakmaya karar verdim. URL:

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

Arkasındaki Blowfish uygulaması, Bruce Schneier'in halka açık C uygulamasının bir limanıdır ve tüm resmi test vektörlerinde başarılıdır.

Spesifikasyona göre kendi yazdığım BCrypt kodu. Ayrıca 0 ila 100 uzunluğunda rastgele şifreler oluşturan ve tuzlayan, şifreleyen ve bunları bir test dosyasına veren bir PHP betiği oluşturdum. C # kodu, şimdiye kadarki zamanın% 100'üyle eşleşiyor. Komut dosyasını kullanabilir ve bunu kendiniz test edebilirsiniz.

Kitaplık ayrıca .Net'in yalnızca SHA-1 uygulamasının aksine herhangi bir HMAC için çalışan PBKDF2 kodunu da içerir (bugün eklendi - yakında C # ile SCrypt yapmayı planlıyorum ve HMAC-SHA256 ile PBKDF2 gerektirir). İstersen kendine buna göre bir plan da yapabilirsin.


0

Yanlış cevap, lütfen aşağıya bakın

.Net Framework'teki tüm "Cng" (Yeni Nesil Şifreleme) sonradan sabitlenmiş algoritmalar artık bcrypt kullanıyor. Örneğin SHA256Cng .


Aslında MS BCrypt (BestCrypt), Blowfish şifresine dayalı olana atıfta bulunmaz - yorum için teşekkür ederim, RobbyD.
Yanıtı silmeyecek, sadece başka birinin aynı kafa karışıklığını yapması durumunda.


1
Bu bağlamda BCrypt, bir Microsoft PR adı BestCrypt'i ifade eder. Daha fazla ayrıntı için stackoverflow.com/questions/9711568/… adresini ziyaret edin.
RobbyD

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.