70

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

タイス

4

1 に答える 1

91

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

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

BCrypt::Password.create('bla') == 'bla' # => true
于 2012-04-13T15:01:38.960 に答える