我想用来has_secure_password
在数据库中存储加密的密码。如果has_secure_password
使用任何形式的盐腌,我在互联网上都找不到。如果使用盐腌,它如何工作?谁能为我澄清一下?
蒂斯
Answers:
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
对于示例哈希,此函数产生:
的==
-functionBCrypt::Password
提取盐并将其应用于传递的字符串:
BCrypt::Password.create('bla') == 'bla' # => true
password_digest
列中的哈希密码连接起来。见github.com/codahale/bcrypt-ruby#salts
BCrypt::Password.create('indu')
在irb中重复运行时,每次调用都会得到不同的哈希值(与预期的一样)。