Pythonでbcryptを使用しパスワードをハッシュ化する

Pythonでbcryptを使用しパスワードをハッシュ化してみます。

今回はパスワードをハッシュ化するためにbcryptを用います。bcryptはPythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■bcryptを使用しパスワードをハッシュ化する

では、早速bcryptを使用しパスワードをハッシュ化するスクリプトを書いていきます。

■コード

import bcrypt

password_test = b"test1234"

salt = bcrypt.gensalt()

hashed = bcrypt.hashpw(password_test,salt)

print(hashed)

インポートでbcryptモジュールを呼び出します。その後にpassword_testという変数を定義します。変数内にハッシュ化するパスワード(文字列)を格納します。

格納後、saltという変数を定義し、変数内でbcrypt.gensalt()を用います。これでハッシュ化する前のパスワードに付加する文字列も生成し、格納します。

次にhashedという変数を定義し、変数内でbcrypt.hashpw()を用いて、ハッシュ化された値を生成します。関数の括弧内には、第1の引数,パラメータとしてパスワードを格納したpassword_test変数を渡し、第2の引数,パラメータとしてsalt変数を渡します。ハッシュ化された値を生成した後に、変数に格納。

最後に、ハッシュ化された値をprint()関数で出力します。

■実行・検証

このスクリプトを「password_hash.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると、今回指定したパスワードが、bcryptを用いたことでハッシュ化された値に生成させることができました。

なお、今回password_test変数内にハッシュ化するパスワード(文字列)を格納しましたが、先頭に「b」と表記し、バイト列として表現しています。

Traceback (most recent call last):
File "password_hash.py", line 7, in <module>
hashed = bcrypt.hashpw(password_test,salt)
File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\bcrypt\__init__.py", line 80, in hashpw
raise TypeError("Unicode-objects must be encoded before hashing")
TypeError: Unicode-objects must be encoded before hashing

これを使用しないと、上記のERRORが発生します。

コメント

タイトルとURLをコピーしました