Использует ли has_secure_password любую форму соления?

Я хочу использовать has_secure_password для хранения зашифрованных паролей в базе данных. Я не могу найти в Интернете, если has_secure_password использует любую форму соления. Если он использует соление, как это работает? Может ли кто-нибудь уточнить это для меня?

Тайс

Ответ 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