bcrypt
を使用してパスワードをハッシュ化し、後で指定されたパスワードが正しいかどうかを確認したいと思います。
パスワードのハッシュは簡単です:
import bcrypt
password = u'foobar'
password_hashed = bcrypt.hashpw(password, bcrypt.gensalt())
# then store password_hashed in a database
プレーンテキストのパスワードを保存されているハッシュと比較するにはどうすればよいですか?
Py-bcryptでは、ソルトを個別に保存する必要はありません:bcrypt
はソルトをハッシュに保存します。
ハッシュをソルトとして使用するだけで、ソルトはハッシュの先頭に保存されます。
>>> import bcrypt
>>> salt = bcrypt.gensalt()
>>> hashed = bcrypt.hashpw('secret', salt)
>>> hashed.find(salt)
0
>>> hashed == bcrypt.hashpw('secret', hashed)
True
>>>
ドキュメントには、ソルトの保存については記載されていません。
#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"
後で、ユーザーが入力したパスワード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
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"