Pythonでbcryptを使用しパスワードをハッシュ値を照合し合っているかどうか確認してみます。
今回はパスワードをハッシュ化するためにbcryptを用います。bcryptはPythonの標準ライブラリではありませんので、事前にインストールする必要があります。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)
■bcryptを使用しパスワードをハッシュ値を照合する
では、早速bcryptを使用しパスワードをハッシュ値を照合するスクリプトを書いていきます。
■コード
import bcrypt password = b"test123456" salt = bcrypt.gensalt() hashed = bcrypt.hashpw(password,salt) if bcrypt.checkpw(password, hashed): print("照合されました") else: print("照合されませんでした")
インポートでbcryptモジュールを呼び出します。その後にpasswordという変数を定義します。変数内にハッシュ化するパスワード(文字列)を格納します。格納する際に、先頭に「b」と表記し、バイト列として表現し、ERRORの発生を防ぎます。
格納後、saltという変数を定義し、変数内でbcrypt.gensalt()を用います。これでハッシュ化する前のパスワードに付加する文字列も生成し、格納します。
次にhashedという変数を定義し、変数内でbcrypt.hashpw()を用いて、ハッシュ化された値を生成します。関数の括弧内には、第1の引数,パラメータとしてパスワードを格納したpassword変数を渡し、第2の引数,パラメータとしてsalt変数を渡します。これでハッシュ化された値が生成され、生成されたものを変数に格納します。
その後、if文の条件分岐を用います。条件式では、bcrypt.checkpw()を用いて、括弧内には第1の引数,パラメータとして、password変数を渡します。第2の引数,パラメーターとしてsalt変数を渡します。これでpassword変数とsalt変数がチェックされます。チェック後、真(True)の場合は、真(True)の時に実行される処理が行われます。今回は実行される処理はprint()関数で「照合しました」という文字列を出力します。
チェックし偽(False)の場合には、else文内で、偽(False)の時に実行される処理が行われます。今回は、print()関数で「照合されませんでした」という文字列が出力されます。
■実行・検証
このスクリプトを「pw_collation.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。
実行してみると、今回のパスワードを元に生成されたハッシュ化された値が、bcrypt.checkpw()を用いたことで、パスワードとの照合が行われ、パスワードであることが確認され、print()関数で「照合しました」と出力させることができました。
コメント