has_secure_password是否使用任何forms的salting?

我想使用has_secure_password在数据库中存储encryption的密码。 我无法在互联网上find如果has_secure_password使用任何forms的has_secure_password 。 如果它使用腌制,它是如何工作的? 任何人都可以为我澄清这一点?

泰斯

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 

对于这个例子散列这个函数产生:

  • 版本:2a
  • 成本:10
  • 盐:$ 2a $ 10 $ 4wXszTTd7ass8j5ZLpK / 7。
  • hash:ywXXgDh7XPNmzfIWeZC1dMGpFghd92e

BCrypt::Password==function提取盐并将其应用于传递的string:

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