Categories: Python

【Python】バイト型のデータをハッシュ化する方法

この記事では、Pythonでバイト型のデータをハッシュ化する方法を解説します。

ハッシュ化することでパスワードなどの外部に漏れて欲しくないデータを比較的安全に保存することができます。

それでは、ハッシュ化する方法を見ていきましょう!

ハッシュ化とは?

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

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

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

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

ハッシュ関数の種類

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

  • MD5
  • SHA256
  • SHA512

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

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

それでは、実際にPythonで適当なデータをハッシュ化してみましょう!

ハッシュ化してみる

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

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

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

View Comments

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago