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

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()関数で「照合しました」と出力させることができました。

コメント

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