Использует ли 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

Для примера хеш-функции эта функция дает:

  • версия: 2а
  • стоимость: 10
  • соль: $ 2a $ 10 $ 4wXszTTd7ass8j5ZLpK / 7.
  • hash: ywXXgDh7XPNmzfIWeZC1dMGpFghd92e

==-функция BCrypt::Password извлекает соль и применяет ее к переданной строке:

BCrypt::Password.create('bla') == 'bla' # => true
Другие вопросы по тегам