web-dev-qa-db-ja.com

has_secure_passwordは任意の形式のソルティングを使用しますか?

has_secure_passwordを使用して、暗号化されたパスワードをデータベースに保存したい。 has_secure_passwordでソルトを使用していると、インターネット上で見つけることができません。塩漬けを使用する場合、どのように機能しますか?誰かがこれを私のために明確にできますか?

Thijs

67
Thijs

has_secure_passwordbcrypt-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。
  • ハッシュ:ywXXgDh7XPNmzfIWeZC1dMGpFghd92e

==BCrypt::Password関数はソルトを抽出し、渡された文字列に適用します。

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