この記事では、Pythonでバイト型のデータをハッシュ化する方法を解説します。
ハッシュ化することでパスワードなどの外部に漏れて欲しくないデータを比較的安全に保存することができます。
それでは、ハッシュ化する方法を見ていきましょう!
ハッシュ化とは?
ハッシュ化とは、任意のデータから固定長の値を生成することです。
生成した値は、「ハッシュ値」と呼ばれます。
ハッシュ化するための関数を「ハッシュ関数」と呼びます。
異なるデータをハッシュ化しても同じハッシュ値はまず生成されないので同等のハッシュ値は同等のデータとして認識することができます。
また、ハッシュ値から元のデータを復元することはできないので、外部に漏れるとまずいデータ(パスワードなど)をハッシュ化し、ハッシュ値のみを保存しておくことでデータが漏洩してしまった場合のリスクを軽減することができます。
ハッシュ関数の種類
ハッシュ関数には、以下のような種類があります。
- MD5
- SHA256
- SHA512
それぞれの特徴を見てみましょう。
| MD5 | 32桁のハッシュ値を生成するハッシュ関数です。安全性があまり高くないので、現在では推奨されていません。 |
|---|---|
| SHA256 | 64桁のハッシュ値を生成するハッシュ関数です。現状、この関数が推奨されています。 |
| SHA512 | 128桁のハッシュ値を生成するハッシュ関数です。とても強固なハッシュ値を生成できますが、コストが少し高めです。 |
それでは、実際にPythonで適当なデータをハッシュ化してみましょう!
ハッシュ化してみる
Pythonでハッシュ化するには、hashlibモジュールを使います。hashlibモジュールには、ハッシュ関数がそれぞれ用意されています。
書式
引数にはバイト型のデータを指定します。
import hashlib # MD5 hashlib.md5(バイトデータ).hexdigest() # SHA256 hashlib.sha256(バイトデータ).hexdigest() # SHA512 hashlib.sha512(バイトデータ).hexdigest()
サンプル
データをハッシュ化し、生成したハッシュ値を出力してみます。
import hashlib # ハッシュ化したいバイト型のデータ password = b'password0123' # MD5 h = hashlib.md5(password).hexdigest() print(f'MD5: {h}') # SHA256 h = hashlib.sha256(password).hexdigest() print(f'SHA256: {h}') # SHA512 h = hashlib.sha512(password).hexdigest() print(f'SHA512: {h}')
実行結果
MD5: 32cec8afc7c26839574099cdbe8eadd6 SHA256: e1687d1ae6af3a05ae2008b0e6eada2f99ae2b56db7af902cb3055342e6e62ad SHA512: 41fe06f16a2f8044eaf1462ddbce9bd8cffc95fa14140e5eaa44daa6bc8409641a49f3f0a3427adca3479817542a77f1e7fa2fe1a7ca5eee55b4be484b99471d
このように、ハッシュ関数によって異なるハッシュ値が生成されます。
まとめ
この記事では、Pythonで文字列をハッシュ化する方法を解説しました。
hashlibモジュールを使う- 現在ハッシュ関数は、SHA256が推奨されている
- 引数には、バイト型のデータを渡す
Pythonでは、とても簡単にハッシュ化できるので大事なデータはハッシュ化や暗号化し、安全に保持しておきましょう!
それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ
- hashlib --- セキュアハッシュおよびメッセージダイジェスト


