Implementasi .net dari bcrypt

116

Adakah yang tahu tentang implementasi bcrypt yang baik, saya tahu pertanyaan ini telah diajukan sebelumnya tetapi mendapat tanggapan yang sangat sedikit. Saya agak tidak yakin hanya memilih implementasi yang muncul di google dan saya berpikir bahwa saya mungkin lebih baik menggunakan sha256 di namespace System.Security.Cryptography, setidaknya saya tahu itu didukung! Apa yang kamu pikirkan

Gareth
sumber

Jawaban:

58

Sepertinya Anda mencari BCrypt.net :

BCrypt.net adalah implementasi dari kode hashing kata sandi berbasis Blowfish OpenBSD, dijelaskan dalam "Skema Kata Sandi yang Dapat Diadaptasi di Masa Depan" oleh Niels Provos dan David Mazières. Ini adalah port langsung jBCrypt oleh Damien Miller, dan karenanya dirilis di bawah lisensi gaya BSD yang sama. Kode ini sepenuhnya dikelola dan harus bekerja dengan implementasi CLI little-endian - kode telah diuji dengan Microsoft .NET dan Mono.

ine
sumber
Ya, itu juga yang saya temukan dengan Google. Apakah Anda menggunakannya, atau apakah Anda tahu jika itu banyak digunakan?
Gareth
2
Alasan saya berpikir untuk menggunakan BCrypt adalah karena artikel ini matasano.com/log/958/… dan mengklaim BCrypt adalah cara terbaiknya.
Gareth
13
Hanya ingin menambahkan catatan bahwa jika Anda menggunakan BCrypt.net di Windows Server 2008, Anda harus menamainya dengan sesuatu selain BCrypt.dll atau akan bertentangan dengan API Windows baru di Vista yang memanggil fungsi di 'bcrypt. dll ', jadi jika Anda memiliki Bcrypt.net sebagai Bcrypt.dll di bin / direktori aplikasi web Anda, Windows tidak akan dapat menemukan dll yang benar dan Anda akan mendapatkan beberapa kesalahan samar.
thelsdj
5
Catatan: Berikut alasan mengapa menggunakan bCrypt (bagi mereka yang tertarik). codahale.com/how-to-safely-store-a-password
thames
1
Artikel dipindahkan: chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow- tables-what-you-need-to-know-s.html
Code Silverback
25

BCrypt.Net tampaknya menjadi perpustakaan paling populer saat ini

http://bcrypt.codeplex.com/

Berikut ini contoh cara menggunakannya untuk hashing kata sandi:

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

Output sampel:

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
sumber
6

Saya membutuhkan implementasi BCrypt ketika memindahkan sesuatu dari PostgreSQL (yang memiliki pg_crypto) ke SQLite (yang tidak), jadi saya menulis sendiri. Melihat dari pesan ini saya bukan satu-satunya yang membutuhkan ini, saya telah memutuskan untuk memberikan lisensi padanya dan melepaskannya. URL-nya adalah:

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

Implementasi Blowfish di belakangnya adalah pelabuhan implementasi domain publik C Bruce Schneier, dan berhasil pada semua vektor uji resmi.

Kode BCrypt yang saya tulis sendiri berdasarkan spesifikasi. Saya juga membuat skrip PHP yang menghasilkan kata sandi acak dengan panjang 0 hingga 100 dan garam, crypts, dan menampilkannya ke file uji. Kode C # cocok 100% dari waktu sejauh ini. Anda dipersilakan untuk menggunakan skrip dan mengujinya sendiri.

Pustaka juga menyertakan kode PBKDF2 yang berfungsi untuk HMAC apa pun yang bertentangan dengan implementasi SHA-1-satunya .Net (ditambahkan hari ini - Saya bermaksud untuk melakukan SCrypt di C # segera dan yang memerlukan PBKDF2 dengan HMAC-SHA256). Anda juga dapat membuat skema berdasarkan ini, jika Anda mau.

Zer
sumber
0

Jawaban yang salah, silakan lihat di bawah

Semua algoritma postfixed "Cng" (Cryptography Next Generation) di .Net Framework sekarang menggunakan bcrypt. Misalnya SHA256Cng .


Sebenarnya MS BCrypt (BestCrypt) tidak mengacu pada yang berdasarkan cipher Blowfish - terima kasih, RobbyD, atas komentarnya.
Tidak akan menghapus jawaban, kalau-kalau ada orang lain yang membuat kebingungan yang sama.

Ioanna
sumber
1
BCrypt dalam konteks itu mengacu pada nama PR Microsoft BestCrypt. Lihat stackoverflow.com/questions/9711568/… untuk lebih jelasnya.
RobbyD