2012-03-14 40 views
14

Tôi đang tìm cách thực hiện bcrypt tôi có thể sử dụng trong Delphi. Về điều hữu ích duy nhất mà Googling mang lại cho tôi là this download page, chứa các tiêu đề đã dịch cho đơn vị winapi có tên là bcrypt.h. Nhưng khi tôi nhìn vào chức năng mà nó cung cấp, bcrypt.h không thực sự chứa bất kỳ cách nào để sử dụng thuật toán Blowfish để băm mật khẩu!Có triển khai bcrypt có sẵn cho Delphi không?

Tôi đã tìm thấy một vài triển khai bcrypt trong C mà tôi có thể xây dựng một DLL từ và liên kết tới, ngoại trừ chúng dường như yêu cầu * nix hoặc GCC cụ thể, do đó sẽ không hoạt động!

Đây là loại xe đẩy tôi lên tường. Tôi nghĩ rằng nó sẽ dễ dàng để tìm thấy một thực hiện, nhưng điều đó dường như không phải là trường hợp nào cả. Có ai biết nơi tôi có thể nhận được một?

+2

Bạn đã sẵn sàng để chiêm ngưỡng bcrypt Windows được giới thiệu trong Vista chưa? JEDI có bản dịch tiêu đề: JwaBCrypt.pas –

+0

@David: Đây dường như là một bản dịch khác của tiêu đề winapi 'bcrypt.h' mà tôi đã đề cập trong câu hỏi, một thực tế không xuất hiện để chứa triển khai băm mật khẩu Blowfish . (Hoặc tôi thiếu một cái gì đó?) –

+0

Tiêu đề của Rudy là nguồn gốc của JEDI, http://blog.delphi-jedi.net/2008/03/10/new-and-additional-header-files-from-rudy/ –

Trả lời

18

Được rồi, vì vậy tôi đã viết nó.

Cách sử dụng:

hash: string; 
hash := TBCrypt.HashPassword('mypassword01'); 

lợi nhuận gì đó như:

$2a$10$Ro0CUfOqk6cXEKf3dyaM7OhSCvnwM9s4wIX9JeLapehKK5YdLxKcm 

Điều hữu ích về vấn đề này (OpenBSD) kiểu mật khẩu băm là:

  • mà nó xác định các thuật toán (2a = bcrypt)
  • sal t được tạo tự động cho bạn và được vận chuyển với hàm băm (Ro0CUfOqk6cXEKf3dyaM7O)
  • thông số chi phí cũng được thực hiện với hàm băm (10).

Để kiểm tra mật khẩu là chính xác:

isValidPassword: Boolean; 
isValidPassword := TBCrypt.CheckPassword('mypassword1', hash); 

bcrypt sử dụng một chi phí yếu tố, trong đó xác định có bao nhiêu lần lặp các thiết lập quan trọng sẽ đi mặc dù. Chi phí càng cao thì càng tốn nhiều tiền để tính băm. Hằng số BCRYPT_COST chứa các chi phí mặc định:

const 
    BCRYPT_COST = 10; //cost determintes the number of rounds. 10 = 2^10 rounds (1024) 

Trong trường hợp này với chi phí 10 nghĩa chìa khóa sẽ được mở rộng và muối 2 10 = 1.024 viên đạn. Đây là yếu tố chi phí thường được sử dụng tại thời điểm này trong thời gian sớm nhất (đầu 21 st thế kỷ). Cũng cần lưu ý rằng, không biết lý do gì, mật khẩu băm OpenBSD được chuyển đổi thành một biến thể Base-64 khác với Base64 được sử dụng bởi tất cả mọi người khác trên hành tinh. Vì vậy, TBCrypt chứa bộ mã hóa và bộ giải mã cơ sở 64 tùy chỉnh.

Nó cũng hữu ích cần lưu ý rằng phiên bản thuật toán băm 2a được sử dụng để có nghĩa là:

  • bcrypt
  • bao gồm terminator rỗng của mật khẩu trong các dữ liệu băm
  • chuỗi unicode là UTF-8 mã hóa

Vì vậy, đó là lý do tại sao các hàm HashPasswordCheckPassword mất WideString (aka UnicodeString) và chuyển đổi nội bộ chúng thành UTF-8. Nếu bạn đang chạy trên một phiên bản của Delphi nơi UnicodeString là một từ dành riêng, sau đó chỉ cần xác định ra:

type 
    UnicodeString = WideString; 

i, như David Heffernan biết, không sở hữu Delphi XE 2. i thêm UnicodeString bí danh , nhưng không bao gồm compilers.inc và xác định đi UnicodeString (vì tôi không biết tên xác định, cũng như tôi không thể kiểm tra nó). Bạn muốn gì từ mã miễn phí?

Mã này bao gồm hai khối: khối

  • Bcrypt.pas (mà tôi đã viết, với các bài kiểm tra Dunit nhúng)
  • Blowfish.pas (mà Dave Barton đã viết, mà tôi thích, mở rộng, cố định một số lỗi và thêm Dunit kiểm tra).

Tôi có thể đặt mã nào ở nơi có thể tồn tại vĩnh viễn ở đâu trên intertub?

Cập nhật 1/1/2015: Nó được đặt vào GitHub một thời gian trước đây: BCrypt for Delphi.

Bonus 2015/04/16: bây giờ Scrypt for Delphi

+2

vĩnh viễn? Không nơi nào thực sự. Nhưng SourceForge, Google Code, GitHub hoặc BitBucket là những ứng cử viên tốt nên có mặt trong một thời gian dài. – afrazier

+0

Bây giờ, các tên tập tin trong câu trả lời ('bcrypt.pas', 'blowfish.pas') liên kết với pastebin. –

+0

Thực sự nên đặt điều này trên Bitbucket! –

Các vấn đề liên quan