Имеет ли безопасный пароль использовать любую форму засолки?


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

Thijs

1 64

1 ответ:

has_secure_password использует bcrypt-ruby. bcrypt-ruby автоматически регулирует хранение и поколение солей для вас. Типичный хэш от bcrypt-ruby выглядит так: awXszTTd7ass8j5ZLpK/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.
  • хэш: ywXXgDh7XPNmzfIWeZC1dMGpFghd92e

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

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