2012-03-04 13 views
23

bcryptを使用してパスワードをハッシュし、後で提供されたパスワードが正しいかどうかを確認します。パスワードをハッシュbcryptを使用して平文パスワードとハッシュパスワードを比較するにはどうすればよいですか?

は簡単です:

import bcrypt 

password = u'foobar' 
password_hashed = bcrypt.hashpw(password, bcrypt.gensalt()) 

# then store password_hashed in a database 

はどのようにして保存されたハッシュにプレーンテキストのパスワードを比較することができますか?

答えて

44

py-bcryptでは、塩を別々に保存する必要はありません。bcryptは塩をハッシュに保存します。

単純にハッシュを塩として使用することができ、塩はハッシュの先頭に格納されます。

>>> import bcrypt 
>>> salt = bcrypt.gensalt() 
>>> hashed = bcrypt.hashpw('secret', salt) 
>>> hashed.find(salt) 
0 
>>> hashed == bcrypt.hashpw('secret', hashed) 
True 
>>> 
+4

偉大な答えですが、 'hash'はPython 2と3の予約済みキーワード(組み込み関数)であり、' hash = ... 'を設定すると、あなたが入っているスコープ内の組み込み関数がオーバーライドされます。 'hashed'や' pw_hash'のようなものです。 – alichaudry

+0

私は同意します。この「ハッシュ」は別の名前で置き換えなければなりません:)。 – ivanleoncz

+0

文字列 '' secret'.encode() 'をエンコードすることを忘れないでください。注:Python 3でテストされています。 – Yamaneko

5

その後、ユーザー入力パスワードuser_passがあるとします。ハッシュも同様にハッシュし、ハッシュと格納されたハッシュを比較し、一致すると元のパスワードも一致します。

bcryptはハッシュされたパスワードの一部としてsalt値を自動的に保存するので、将来の入力もハッシュするときに使用できることに注意してください。周り

初回:

import bcrypt 

password = u'foobar' 
salt = bcrypt.gensalt() 
password_hashed = bcrypt.hashpw(password, salt) 

# store 'password_hashed' in a database of your choosing 

後の時代:

#Initial generation 
hashed = bcrypt.hashpw(password, bcrypt.gensalt()) 
#Store hashed in your db 

#Load hashed from the db and check the provided password 
if bcrypt.hashpw(password, hashed) == hashed: 
    print "It matches" 
else: 
    print "It does not match" 

http://www.mindrot.org/projects/py-bcrypt/

import bcrypt 
password = something_that_gets_input() 

stored_hash = something_that_gets_this_from_the_db() 

if bcrypt.hashpw(password, stored_hash) == stored_hash: 
    # password matches 
+0

はこれに新しいもの...ありがとう、私は完全に事実を行方不明になったこと塩とパスワードを保存してから比較する必要があります。ありがとう! – MFB

+2

bcryptを使用するときに塩を保存する必要はありません。以下の答えは正しいものです。 –

11

ドキュメントは、塩を格納言及していない、それはあなただけに持っていると言います

+0

bcrypt.gensalt()を呼び出すたびに新しい塩が生成されるため、bcrypt.hashpw()の結果とともに塩を保存する必要があります。 – skyler

+6

@skyler - bcryptでは、塩はハッシュの一部として保存されます。それはハッシュに保存され、ハッシュは自動的にハッシュと比較されます。 –

関連する問題