Python hashlib モジュール

Python hashlibこのモジュールは主にハッシュ操作を行うために使用されます。

ハッシュ(Hash)とは、任意の長さの入力データを固定長の出力データにマッピングするアルゴリズムです。

ハッシュは通常、データの整合性の検証やパスワードの安全な保存などのシナリオで使用されます。

ハッシュ関数の出力は通常、一見ランダムな文字と数字の列です。

hashlib モジュールは、MD5、SHA-1、SHA-256 などの一般的なハッシュアルゴリズムの実装を提供します。

使用するにはhashlibまず関数をインポートする必要があります:

import hashlib 

hashlib モジュールの内容を表示します:

例

>>> import hashlib
>>> dir(hashlib)
['__all__', '__block_openssl_constructor', '__builtin_constructor_cache', '__builtins__', '__cached__', '__doc__', '__file__', '__get_builtin_constructor', '__loader__', '__name__', '__package__', '__spec__', '_hashlib', 'algorithms_available', 'algorithms_guaranteed', 'blake2b', 'blake2s', 'md5', 'new', 'pbkdf2_hmac', 'scrypt', 'sha1', 'sha224', 'sha256', 'sha384', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'sha512', 'shake_128', 'shake_256']

以下は、hashlib モジュールのよく使うメソッドとハッシュアルゴリズムの概要です。

よく使うメソッド

hashlib.new(name, data=None): ハッシュオブジェクトを作成します。

name パラメータはハッシュアルゴリズムの名前で、data パラメータはハッシュ化されるデータです。

例


import hashlib

sha256_hash = hashlib.new('sha256')
sha256_hash.update(b'サンプル')
print(sha256_hash.hexdigest())

出力結果は次のとおりです:

673dc967d03201db7fe47b7eabd56c47ca5bc694222de303106a5504e5d0daa8

hashlib.md5() / hashlib.sha1() / hashlib.sha256() / ...: 特定のハッシュアルゴリズムを直接使用してハッシュオブジェクトを作成します。

例

import hashlib

md5_hash = hashlib.md5(b'サンプル')
print(md5_hash.hexdigest())

出力結果は次のとおりです:

18fa661e2a4a7dd6471cc1407290cf6e

ハッシュオブジェクトのメソッド

update(data): ハッシュオブジェクトのメッセージ内容を更新します。

例

import hashlib

sha256_hash = hashlib.sha256()
sha256_hash.update(b'Hello, ')
sha256_hash.update(b'サンプル!')
print(sha256_hash.hexdigest())

出力結果は次のとおりです:

1b56561022276e9a5a8e1cda72e1b39fca6f6074326a74d39f6dfd9540c8ecd7

hexdigest(): 16進数表現のハッシュ値を取得します。

例

import hashlib

md5_hash = hashlib.md5(b'サンプル')
print(md5_hash.hexdigest())

出力結果は次のとおりです:

18fa661e2a4a7dd6471cc1407290cf6e

digest(): 2進数表現のハッシュ値を取得します。

例

import hashlib

sha1_hash = hashlib.sha1(b'サンプル')
print(sha1_hash.digest())

出力結果は次のとおりです:

b'4\x17\t\xd0\xdb\xc2f3/\x1c\xbc\xd8\xc2_\xd4\xa0T\x12\xb7\xd4'

一般的なハッシュアルゴリズム

MD5

例

import hashlib

md5_hash = hashlib.md5(b'サンプル')
print(md5_hash.hexdigest())

出力結果は次のとおりです:

18fa661e2a4a7dd6471cc1407290cf6e

SHA-1

例

import hashlib

sha1_hash = hashlib.sha1(b'サンプル')
print(sha1_hash.hexdigest())

出力結果は次のとおりです:

341709d0dbc266332f1cbcd8c25fd4a05412b7d4

SHA-256

例

import hashlib

sha256_hash = hashlib.sha256(b'サンプル')
print(sha256_hash.hexdigest())

出力結果は次のとおりです:

673dc967d03201db7fe47b7eabd56c47ca5bc694222de303106a5504e5d0daa8

SHA-512

例

import hashlib

sha512_hash = hashlib.sha512(b'サンプル')
print(sha512_hash.hexdigest())

出力結果は次のとおりです:

7cfe50493eebd48ee7330c797459c2d0d5ca943bd1c84ad7a0b6783b11cd49d06b4a1dc84ee9ea5e20d0bfedbdb67e716500a20e5870abecea3f32dc8484a811

実際のアプリケーションでは、適切なハッシュアルゴリズムの選択は具体的なニーズによって異なります。MD5 と SHA-1 は、特にセキュリティ分野では安全ではないと見なされていることに注意してください。SHA-256 や SHA-512 などのより強力なアルゴリズムを使用することをお勧めします。

Python hashlib モジュールで一般的なハッシュアルゴリズムとその意味:

アルゴリズム名ダイジェスト長(ビット)出力長(バイト)安全性用途
md512816安全ではないデータ整合性の検証、パスワードの保存など
sha116020安全ではないデータ整合性の検証、パスワードの保存など
sha22422428低データ整合性の検証、デジタル署名など
sha25625632中データ整合性の検証、デジタル署名など
sha38438448高デジタル署名、暗号化アルゴリズムなど
sha51251264高デジタル署名、暗号化アルゴリズムなど
sha3_22422428高将来の標準となる SHA-3 ファミリーのメンバーであり、デジタル署名などに適しています。
sha3_25625632高将来の標準となる SHA-3 ファミリーのメンバーであり、デジタル署名などに適しています。
sha3_38438448高将来の標準となる SHA-3 ファミリーのメンバーであり、デジタル署名などに適しています。
sha3_51251264高将来の標準となる SHA-3 ファミリーのメンバーであり、デジタル署名などに適しています。
shake_128可変可変高SHAKE シリーズは SHA-3 ファミリーの可変長バージョンであり、さまざまなアプリケーションに適しています。
shake_256可変可変高SHAKE シリーズは SHA-3 ファミリーの可変長バージョンであり、さまざまなアプリケーションに適しています。

説明:

  • ダイジェスト長(ビット):ハッシュアルゴリズムの出力ダイジェスト長をビット単位で示します。
  • 出力長(バイト):ハッシュアルゴリズムの出力ダイジェスト長をバイト単位で示します。
  • 安全性:ハッシュアルゴリズムの安全性レベルを示し、「安全ではない」、「低」、「中」、「高」を含みます。これは一般的な分類であり、具体的な安全性はアルゴリズムの用途と具体的な攻撃シナリオも考慮する必要があります。
その他の拡張