Python hashlib モジュール
Python hashlibこのモジュールは主にハッシュ操作を行うために使用されます。
ハッシュ(Hash)とは、任意の長さの入力データを固定長の出力データにマッピングするアルゴリズムです。
ハッシュは通常、データの整合性の検証やパスワードの安全な保存などのシナリオで使用されます。
ハッシュ関数の出力は通常、一見ランダムな文字と数字の列です。
hashlib モジュールは、MD5、SHA-1、SHA-256 などの一般的なハッシュアルゴリズムの実装を提供します。
使用するにはhashlibまず関数をインポートする必要があります:
import hashlib
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() / ...: 特定のハッシュアルゴリズムを直接使用してハッシュオブジェクトを作成します。
例
md5_hash = hashlib.md5(b'サンプル')
print(md5_hash.hexdigest())
出力結果は次のとおりです:
18fa661e2a4a7dd6471cc1407290cf6e
ハッシュオブジェクトのメソッド
update(data): ハッシュオブジェクトのメッセージ内容を更新します。
例
sha256_hash = hashlib.sha256()
sha256_hash.update(b'Hello, ')
sha256_hash.update(b'サンプル!')
print(sha256_hash.hexdigest())
出力結果は次のとおりです:
1b56561022276e9a5a8e1cda72e1b39fca6f6074326a74d39f6dfd9540c8ecd7
hexdigest(): 16進数表現のハッシュ値を取得します。
例
md5_hash = hashlib.md5(b'サンプル')
print(md5_hash.hexdigest())
出力結果は次のとおりです:
18fa661e2a4a7dd6471cc1407290cf6e
digest(): 2進数表現のハッシュ値を取得します。
例
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
例
md5_hash = hashlib.md5(b'サンプル')
print(md5_hash.hexdigest())
出力結果は次のとおりです:
18fa661e2a4a7dd6471cc1407290cf6e
SHA-1
例
sha1_hash = hashlib.sha1(b'サンプル')
print(sha1_hash.hexdigest())
出力結果は次のとおりです:
341709d0dbc266332f1cbcd8c25fd4a05412b7d4
SHA-256
例
sha256_hash = hashlib.sha256(b'サンプル')
print(sha256_hash.hexdigest())
出力結果は次のとおりです:
673dc967d03201db7fe47b7eabd56c47ca5bc694222de303106a5504e5d0daa8
SHA-512
例
sha512_hash = hashlib.sha512(b'サンプル')
print(sha512_hash.hexdigest())
出力結果は次のとおりです:
7cfe50493eebd48ee7330c797459c2d0d5ca943bd1c84ad7a0b6783b11cd49d06b4a1dc84ee9ea5e20d0bfedbdb67e716500a20e5870abecea3f32dc8484a811
実際のアプリケーションでは、適切なハッシュアルゴリズムの選択は具体的なニーズによって異なります。MD5 と SHA-1 は、特にセキュリティ分野では安全ではないと見なされていることに注意してください。SHA-256 や SHA-512 などのより強力なアルゴリズムを使用することをお勧めします。
Python hashlib モジュールで一般的なハッシュアルゴリズムとその意味:
| アルゴリズム名 | ダイジェスト長(ビット) | 出力長(バイト) | 安全性 | 用途 |
|---|---|---|---|---|
| md5 | 128 | 16 | 安全ではない | データ整合性の検証、パスワードの保存など |
| sha1 | 160 | 20 | 安全ではない | データ整合性の検証、パスワードの保存など |
| sha224 | 224 | 28 | 低 | データ整合性の検証、デジタル署名など |
| sha256 | 256 | 32 | 中 | データ整合性の検証、デジタル署名など |
| sha384 | 384 | 48 | 高 | デジタル署名、暗号化アルゴリズムなど |
| sha512 | 512 | 64 | 高 | デジタル署名、暗号化アルゴリズムなど |
| sha3_224 | 224 | 28 | 高 | 将来の標準となる SHA-3 ファミリーのメンバーであり、デジタル署名などに適しています。 |
| sha3_256 | 256 | 32 | 高 | 将来の標準となる SHA-3 ファミリーのメンバーであり、デジタル署名などに適しています。 |
| sha3_384 | 384 | 48 | 高 | 将来の標準となる SHA-3 ファミリーのメンバーであり、デジタル署名などに適しています。 |
| sha3_512 | 512 | 64 | 高 | 将来の標準となる SHA-3 ファミリーのメンバーであり、デジタル署名などに適しています。 |
| shake_128 | 可変 | 可変 | 高 | SHAKE シリーズは SHA-3 ファミリーの可変長バージョンであり、さまざまなアプリケーションに適しています。 |
| shake_256 | 可変 | 可変 | 高 | SHAKE シリーズは SHA-3 ファミリーの可変長バージョンであり、さまざまなアプリケーションに適しています。 |
説明:
- ダイジェスト長(ビット):ハッシュアルゴリズムの出力ダイジェスト長をビット単位で示します。
- 出力長(バイト):ハッシュアルゴリズムの出力ダイジェスト長をバイト単位で示します。
- 安全性:ハッシュアルゴリズムの安全性レベルを示し、「安全ではない」、「低」、「中」、「高」を含みます。これは一般的な分類であり、具体的な安全性はアルゴリズムの用途と具体的な攻撃シナリオも考慮する必要があります。