web-dev-qa-db-ja.com

bcryptを使用してプレーンテキストのパスワードとハッシュされたパスワードを比較する方法は?

bcryptを使用してパスワードをハッシュ化し、後で指定されたパスワードが正しいかどうかを確認したいと思います。

パスワードのハッシュは簡単です:

import bcrypt

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

# then store password_hashed in a database

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

35
MFB

Py-bcryptでは、ソルトを個別に保存する必要はありません:bcryptはソルトをハッシュに保存します。

ハッシュをソルトとして使用するだけで、ソルトはハッシュの先頭に保存されます。

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

ドキュメントには、ソルトの保存については記載されていません。

#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/

14
user317033

後で、ユーザーが入力したパスワードuser_pass。それも同様にハッシュし、ハッシュと保存されているハッシュを比較し、一致する場合は元のパスワードも一致します。

Bcryptは、ハッシュ値の一部としてソルト値を自動的に保存するため、将来の入力をハッシュするときにも使用できることに注意してください。

初めて:

import bcrypt

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

# store 'password_hashed' in a database of your choosing

後の時間:

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
5
Amber

Pythonには慣れていませんが、使用できると思います:
public static boolean checkpw(Java.lang.String plaintext、Java.lang.String hashed)

# Check that an unencrypted password matches one that has  
# previously been hashed.
if bcrypt.checkpw(plaintext, hashed):
    print "It matches"
else:
    print "It does not match"
4
Govind Singh