39

bcryptパスワードをハッシュし、後で提供されたパスワードが正しいかどうかを確認するために使用したいと思います。

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

import bcrypt

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

# then store password_hashed in a database

平文のパスワードを保存されたハッシュと比較するにはどうすればよいですか?

4

5 に答える 5

67

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

ハッシュをソルトとして単純に使用でき、ソルトはハッシュの先頭に格納されます。

>>> import bcrypt
>>> salt = bcrypt.gensalt()
>>> hashed = bcrypt.hashpw('secret', salt)
>>> hashed.find(salt)
0
>>> hashed == bcrypt.hashpw('secret', hashed)
True
>>>
于 2012-10-21T19:11:06.870 に答える
19

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

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

于 2012-05-03T18:56:57.980 に答える
6

後で、ユーザー入力のパスワードがあるとしましょう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
于 2012-03-04T22:47:06.093 に答える
4

私は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"
于 2014-05-17T10:11:13.853 に答える