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