我想使用has_secure_password
将加密密码存储在数据库中。如果has_secure_password
使用任何形式的腌制,我都无法在互联网上找到。如果它使用盐腌,它是如何工作的?谁能为我澄清这个?
泰斯
答案 0 :(得分:86)
has_secure_password
使用bcrypt-ruby。 bcrypt-ruby
会自动为您存储和生成盐。 bcrypt-ruby
的典型哈希值如下所示:$2a$10$4wXszTTd7ass8j5ZLpK/7.ywXXgDh7XPNmzfIWeZC1dMGpFghd92e
。使用以下函数在内部拆分此哈希:
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
对于示例哈希,此函数会产生:
==
- BCrypt::Password
的函数提取salt并将其应用于传递的字符串:
BCrypt::Password.create('bla') == 'bla' # => true