環境設定 数値 文字列 正規表現 リスト タプル 集合 辞書 ループ 関数 クラス データクラス 時間 パス ファイル スクレイピング その他

Python の hashlib で sha256 ハッシュ値を求める

最終更新日 2023.02.18

Python のハッシュ値を求める関数は hashlib にあります。

関数の候補がたくさんあります。ハッシュ値を求めるコードは次のようになります。

import hashlib

x = 'abc'

m = hashlib.md5(x.encode()).hexdigest()
s256 = hashlib.sha256(x.encode()).hexdigest()
s384 = hashlib.sha384(x.encode()).hexdigest()
s512 = hashlib.sha512(x.encode()).hexdigest()

print(m)  # 900150983cd24fb0d6963f7d28e17f72
print(s256)  # ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
print(s384)  # cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7
print(s512)  # ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f

hashlib には md5 や sha256 などさまざまな関数があります。関数にはエンコード済みの文字列を入れます。encode がないとエラーになります。

上のように 16 進数の文字列を表示するときは hexdigest を続けましょう。hexdigest がないと下のようにハッシュ・オブジェクトが返ります。

import hashlib

x = 'abc'

m = hashlib.md5(x.encode())

print(m)  # <md5 HASH object @ 0x10440e180>

ハッシュ値

文字列などを暗号化した値をハッシュ値といいます。

例:
abc → pawe3fjcaks4s8asafeivbzms

ハッシュ値からもとの文字列を求めることはできません。しかし同じ文字列は同じハッシュ値になります。abc という文字列はどのタイミング、どの環境であっても同じハッシュ値になります。

ユーザーのパスワードをデータベース(のテーブル)に保存するとき、ユーザーが入力したパスワードはそのままでは保存しません。通常、パスワードは暗号化して、そのハッシュ値をデータベースに保存します。

ハッシュ値を求める関数

ソフトウェアでハッシュ値を扱うときは、下のような関数を作るといいでしょう。

import hashlib


def get_hash(s: str):
    return hashlib.sha256(s.encode()).hexdigest()


a = get_hash('abc')

print(a)
# ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad