2012-04-13 39 views
61

Tôi muốn sử dụng has_secure_password để lưu trữ mật khẩu được mã hóa trong cơ sở dữ liệu. Tôi không thể tìm thấy trên internet nếu has_secure_password sử dụng bất kỳ hình thức muối nào. Nếu nó sử dụng muối, nó hoạt động như thế nào? Bất cứ ai có thể làm rõ điều này cho tôi?has_secure_password có sử dụng bất kỳ hình thức muối nào không?

Thijs

Trả lời

79

has_secure_password sử dụng bcrypt-ruby. bcrypt-ruby sẽ tự động xử lý việc lưu trữ và tạo ra các muối cho bạn. Một băm điển hình từ bcrypt-ruby trông giống như sau: $2a$10$4wXszTTd7ass8j5ZLpK/7.ywXXgDh7XPNmzfIWeZC1dMGpFghd92e. băm này được chia trong nội bộ bằng cách sử dụng chức năng sau:

def split_hash(h) 
    _, v, c, mash = h.split('$') 
    return v, c.to_i, h[0, 29].to_str, mash[-31, 31].to_str 
end 

Đối với ví dụ băm chức năng này sản lượng:

  • phiên bản: 2a
  • chi phí: 10
  • muối: $ 2a $ 10 $ 4wXszTTd7ass8j5ZLpK/7.
  • băm: ywXXgDh7XPNmzfIWeZC1dMGpFghd92e

Các == -function của BCrypt::Password chiết xuất muối và áp dụng nó vào chuỗi thông qua:

BCrypt::Password.create('bla') == 'bla' # => true 
+1

tôi tin rằng tác giả đã được hỏi về một cột riêng biệt cho muối. Không có cách nào để chúng tôi kiểm soát muối này, vì vậy đối với người dùng, nó hoạt động giống như một trình băm mở rộng - làm ảnh hưởng đến chỉ 1 cột làm cho việc phá vỡ mật khẩu của chúng tôi chỉ là vấn đề thời gian. – jdoe

+11

Câu hỏi là 'Liệu has_secure_password có sử dụng bất kỳ dạng muối nào không?', Và nó có. Tôi nghĩ hầu hết thời gian toàn bộ cơ sở dữ liệu bị xâm nhập, do đó, nó không tạo sự khác biệt nếu muối được lưu trong cột phụ. Tuy nhiên, bạn đúng rằng nó an toàn hơn trong trường hợp chỉ một cột của cơ sở dữ liệu bị xâm nhập. – fabi

+0

Xin chào Fabi, cảm ơn câu trả lời, xin vui lòng upvote câu hỏi là tốt nếu bạn nghĩ rằng nó là thú vị/áp dụng cho một đối tượng lớn hơn. –

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