Ответ 1
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
извлекает соль и применяет ее к переданной строке:
BCrypt::Password.create('bla') == 'bla' # => true