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