2016-06-18 8 views
0

ユーザー入力のパスワードフィールドとハッシュされたパスワードを比較しようとしています。私はドキュメントを見て、私が探していたものを見つけることができませんでした。私はパスワードを使用してハッシュしますdjangoでbcrytを使用してハッシュされたパスワークとパスワードを比較する

pw_bytes = password.encode('utf-8') 
hashed = bcrypt.hashpw(pw_bytes, bcrypt.gensalt()) 

パスワードを再ハッシュすれば、私には別のハッシュが与えられます。 dbからパスワードを削除したり、ユーザーが入力したパスワードを再ハッシュして一致させるにはどうすればよいですか?

+1

あなたの塩は、あなたがこれを実行するたびに異なっています。それは毎回異なったハッシュであるべきです(SHOULD)。反復可能なハッシュが必要な場合は、塩も保存する必要があります。 –

+0

だから私のデータベースに塩を保存する必要がありますか? – Aaron

+0

はい。通常、各ユーザーレコードで塩を保存します。ユーザーがパスワードを変更するたびに塩を変更することをお勧めします。 –

答えて

2

あなたはで暗号化されたパスワードをbcrypt.gensalt()の結果を保存し、後でパスワード試行をハッシュする際bcrypt()に再びそれを渡す必要があります。

塩のポイントは、ユーザーごとに固有のハッシュを作成することです。つまり、2人のユーザーが同じパスワードを使用する場合、ハッシュは理想的に異なるはずです。

この塩は、すべてのハッシュが侵害された場合にパスワードを保護するためのものです。

誰かが辞書内のすべての単語に対してハッシュを実行してから、一致するかどうかハッシュを調べることができます。これらのルックアップテーブルはレインボーテーブルと呼ばれます。

正しく実行された場合、各パスワードは固有の塩を持っています。虹のテーブルは、のすべての単語のエントリをと組み合わせて、すべての可能な塩の組み合わせで組み合わせる必要があります。これは、すでに大きなテーブルの必要なサイズを乗算します。 best practices

  • using non random salts
  • 関連する問題