triển khai .net của bcrypt


116

Có ai biết về việc triển khai tốt bcrypt không, tôi biết câu hỏi này đã được hỏi trước đây nhưng nó nhận được rất ít phản hồi. Tôi hơi không chắc về việc chỉ chọn một triển khai xuất hiện trên google và tôi nghĩ rằng tôi có thể tốt hơn nên sử dụng sha256 trong không gian tên System.Security.Cryptography, ít nhất thì tôi biết nó được hỗ trợ! Bạn đang nghĩ gì?

Câu trả lời:


58

Có vẻ như bạn đang tìm BCrypt.net :

BCrypt.net là một triển khai mã băm mật khẩu dựa trên Blowfish của OpenBSD, được mô tả trong "Kế hoạch mật khẩu thích ứng trong tương lai" của Niels Provos và David Mazières. Đây là một cổng trực tiếp của jBCrypt bởi Damien Miller, và do đó được phát hành theo cùng một giấy phép kiểu BSD. Mã được quản lý hoàn toàn và sẽ hoạt động với bất kỳ triển khai CLI nhỏ nào - nó đã được thử nghiệm với Microsoft .NET và Mono.


Vâng, đó cũng là cái tôi tìm thấy với Google. Bạn có sử dụng nó, hoặc bạn không biết nó có được sử dụng rộng rãi hay không?
Gareth

2
Lý do tôi nghĩ về việc sử dụng BCrypt là vì bài viết này matasano.com/log/958/… và nó tuyên bố BCrypt là con đường để đi.
Gareth

13
Tôi chỉ muốn thêm một lưu ý rằng nếu bạn đang sử dụng BCrypt.net trên Windows Server 2008, bạn sẽ cần đặt tên nó khác với BCrypt.dll hoặc nó sẽ xung đột với Windows API mới trong Vista gọi các hàm trong 'bcrypt. dll ', vì vậy nếu bạn có Bcrypt.net dưới dạng Bcrypt.dll trong thư mục bin / ứng dụng web của mình, Windows sẽ không thể tìm thấy dll chính xác và bạn sẽ gặp một số lỗi khó hiểu.
thelsdj

5
Lưu ý: Lý do sau đây về lý do tại sao sử dụng bCrypt (dành cho những người quan tâm). codahale.com/how-to-safely-store-a-password
thames

1
Đã chuyển bài viết: 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 dường như là một thư viện phổ biến nhất tại thời điểm này

http://bcrypt.codeplex.com/

Đây là một ví dụ về cách sử dụng nó cho mật khẩu băm:

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

Đầu ra mẫu:

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

Tôi cần triển khai BCrypt khi di chuyển thứ gì đó từ PostgreSQL (có pg_crypto) sang SQLite (không có), vì vậy tôi đã viết của riêng mình. Nhìn thấy từ thông báo này, tôi không phải là người duy nhất cần điều này, tôi đã quyết định lấy giấy phép cho nó và phát hành nó. URL là:

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

Việc triển khai Blowfish đằng sau nó là một cổng triển khai miền công cộng C của Bruce Schneier và thành công trên tất cả các vectơ thử nghiệm chính thức.

Mã BCrypt tôi tự viết dựa trên thông số kỹ thuật. Tôi cũng đã tạo một tập lệnh PHP tạo mật khẩu ngẫu nhiên có độ dài từ 0 đến 100 và các muối, mã hóa chúng và xuất chúng ra một tệp thử nghiệm. Cho đến nay, mã C # khớp với những điều này 100%. Bạn có thể sử dụng script và tự kiểm tra điều này.

Thư viện cũng bao gồm mã PBKDF2 hoạt động cho bất kỳ HMAC nào trái ngược với triển khai chỉ SHA-1 của .Net (được thêm vào hôm nay - tôi dự định sẽ sớm thực hiện SCrypt trong C # và điều đó yêu cầu PBKDF2 với HMAC-SHA256). Bạn cũng có thể tạo cho mình một kế hoạch dựa trên điều này, nếu bạn muốn.


0

Câu trả lời sai, vui lòng xem bên dưới

Tất cả các thuật toán đã sửa lỗi "Cng" (Cryptography Next Generation) trong .Net Framework hiện sử dụng bcrypt. Ví dụ: SHA256Cng .


Trên thực tế, MS BCrypt (BestCrypt) không đề cập đến công cụ dựa trên mật mã Blowfish - cảm ơn bạn, RobbyD, đã nhận xét.
Sẽ không xóa câu trả lời, đề phòng bất kỳ ai khác nhầm lẫn tương tự.


1
BCrypt trong ngữ cảnh đó đề cập đến tên PR của Microsoft là BestCrypt. Xem stackoverflow.com/questions/9711568/… để biết thêm chi tiết.
RobbyD

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.