我希望使用has_secure_password
将加密后的密码存储在数据库中。我在互联网上找不到has_secure_password
是否使用任何形式的盐值。如果它使用了盐值,那么它是如何工作的呢?有人可以为我澄清一下吗?
Thijs
我希望使用has_secure_password
将加密后的密码存储在数据库中。我在互联网上找不到has_secure_password
是否使用任何形式的盐值。如果它使用了盐值,那么它是如何工作的呢?有人可以为我澄清一下吗?
Thijs
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
的 ==
函数会提取盐并将其应用于传递的字符串:
BCrypt::Password.create('bla') == 'bla' # => true
BCrypt::Password.create('indu')
时,每次调用都会得到不同的哈希值(正如预期的那样)。 - fabi