Python

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

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

ハッシュ化とは?

ハッシュ化とは、任意のデータから固定長の値を生成することです。
生成した値は、「ハッシュ値」と呼ばれます。

異なるデータをハッシュ化しても同じハッシュ値はまず生成されないので、同等のハッシュ値は同等のデータとして認識することができます。

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

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

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

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

ハッシュ関数の種類

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

  • MD5
  • SHA256
  • SHA512

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

MD5 32桁のハッシュ値を生成するハッシュ関数です。安全性があまり高くないので、現在では推奨されていません。
SHA256 64桁のハッシュ値を生成するハッシュ関数です。現状、この関数が推奨されています。
SHA512 128桁のハッシュ値を生成するハッシュ関数です。とても強固なハッシュ値を生成できますが、コストが少し高めです。

ハッシュ化してみる

Pythonでハッシュ化するには、hashlibモジュールを使います。hashlibモジュールには、ハッシュ関数がそれぞれ用意されています。

hashlibモジュールは、標準ライブラリです

書式

引数にはバイト型のデータを指定します。

import hashlib

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

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

# SHA512
hashlib.sha512(バイトデータ).hexdigest()
バイト型には、ASCII文字のみ含めることができます

サンプル

データをハッシュ化し、生成したハッシュ値を出力してみます。

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

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

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』