【Python】ハッシュ化する方法【hashlibモジュール】

Python

この記事では、Pythonで文字列をハッシュ化する方法を解説します。ハッシュ化することでパスワードなど、外部に漏れて欲しくないデータを安全に保存することができます。

ハッシュ化とは?

ハッシュ化とは、任意のデータから固定長の値を生成することです。生成した値は『ハッシュ値』と呼ばれます。異なるデータをハッシュ化しても同じハッシュ値は、まず生成されないので、同等のハッシュ値は同等のデータとして認識することができます。

ハッシュ値は復号できない

ハッシュ値から元のデータを復元することはできません。なので、外部に漏れるとまずいデータ(パスワードなど)をハッシュ化してハッシュ値のみを保存しておくことで、データが漏洩してしまった場合のリスクを軽減することができます。

ハッシュ化するための関数

ハッシュ化するための関数を「ハッシュ関数」と呼びます。

ハッシュ関数の種類

ハッシュ関数には、以下のような種類があります。

  • MD5
  • SHA256
  • SHA512

それぞれの特徴を見てみましょう。

MD5

32桁のハッシュ値を生成するハッシュ関数です。安全性があまり高くないので、推奨されていません。

SHA256(推奨)

64桁のハッシュ値を生成するハッシュ関数です。現状、この関数が推奨されています。

SHA512

128桁のハッシュ値を生成するハッシュ関数です。とても強固なハッシュ値を生成できますが、コストが少し高めです。

ハッシュ化してみる

Pythonでハッシュ化するには、hashlibモジュールを使います。

使い方

hashlibモジュールには、ハッシュ関数がそれぞれ用意されています。
引数には、バイト型のデータを指定します。

import hashlib

# MD5
hashlib.md5(バイトデータ).hexdigest()

# SHA256
hashlib.sha256(バイトデータ).hexdugest()

# 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では、とても簡単にハッシュ化できるので、大事なデータはハッシュ化や暗号化して安全に保持しておきましょう!

それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ

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