2012-04-13 24 views
61

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

タイス

答えて

79

has_secure_passwordbcrypt-rubyを使用しています。 bcrypt-rubyは自動的に塩の貯蔵と生成を処理します。 bcrypt-rubyの典型的なハッシュは、$2a$10$4wXszTTd7ass8j5ZLpK/7.ywXXgDh7XPNmzfIWeZC1dMGpFghd92eのようになります。

  • バージョン:2A
  • コスト:10
  • 塩:$ 2A $ 10 $ 4wXszTTd7ass8j5ZLpKこの機能利回り例えば、ハッシュについて

    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 
    

    :このハッシュは、以下の機能を使用して内部的に分割され、 /7。

  • ハッシュ:ywXXgDh7XPNmzfIWeZC1dMGpFghd92e

BCrypt::Password== -functionは塩を抽出し、渡された文字列に適用されます。私は、著者は、塩のために別の列について尋ねたことが信じられ

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

。この塩を制御する方法はありません。したがって、ユーザーにとってはハッシュエクステンダーのように機能します.1つの列を妥協すると、パスワードを壊すだけです。 – jdoe

+11

質問は 'has_secure_passwordは何らかの形の塩を使用していますか?'という質問がありました。 ほとんどの場合、データベース全体が危険にさらされていると思います。したがって、塩が余分な列に保存されても差はありません。 しかし、データベースの1つの列だけが侵害された場合には、より安全です。 – fabi

+0

こんにちはファビ、答えのおかげで、あなたはそれが面白い/より多くの視聴者に適用されると思う場合は、同様に質問をupvoteしてください。 –

関連する問題