Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python入門】hashlibモジュールで実現するセキュアハッシュとメッセージダイジェスト


Pythonでセキュアハッシュやメッセージダイジェストを扱うには、標準ライブラリのhashlibモジュールを使用します。このモジュールは、SHA1、SHA224、SHA256、SHA512といった主要なセキュアハッシュアルゴリズム、さらにはRSA社が開発したMD5アルゴリズムに対して、共通のインターフェースを提供します。古い方式は「メッセージダイジェスト」、新しい方式は「セキュアハッシュ」と呼ばれます。

hashlibモジュールを利用するには、まずPythonコード内でインポートを行います。

import hashlib

このモジュールには、md5、sha1、sha224、sha256、sha512などの定義済みアルゴリズムがあらかじめ用意されており、OpenSSLライブラリから追加のアルゴリズムを利用することも可能です。

以下に、hashlibモジュールの主な定数とメソッドを紹介します。

定数:hashlib.algorithms_guaranteed

すべてのプラットフォームにおいて、本モジュールでのサポートが保証されているハッシュアルゴリズム名のセットを返します。

定数:hashlib.algorithms_available

実行中のPythonインタープリタで実際に利用できるハッシュアルゴリズム名のセットを返します。OpenSSL由来の追加アルゴリズムも含まれます。

定数:hashlib.digest_size

生成されるハッシュ値のサイズをバイト単位で返します。

定数:hashlib.block_size

ハッシュアルゴリズムの内部ブロックサイズをバイト単位で返します。

メソッド:hashlib.new(name[, data])

コンストラクタです。第一引数に利用したいアルゴリズム名を指定します。定義済みのハッシュだけでなく、OpenSSLライブラリが提供するその他のアルゴリズムも選択できます。

メソッド:hashlib.update(arg)

ハッシュオブジェクトを、引数として渡したデータで更新します。このメソッドを繰り返し呼び出すことは、連結したデータを一度に渡すことと同等です。大きなファイルを分割しながら処理したい場合などに便利です。

メソッド:hashlib.digest()

update()メソッドで渡されたデータのダイジェスト(要約)をバイト列として返します。戻り値のサイズはdigest_sizeと一致し、0〜255の範囲の任意のバイト値を含みます。

メソッド:hashlib.hexdigest()

digest()と同様の処理を行いますが、結果が16進数の文字列のみで構成される点が異なります。人間が読みやすい形式のため、ネットワーク経由でデータを送受信する際やログに出力する際に広く使われています。

サンプルコード

import hashlib
my_hash1 = hashlib.md5() # md5を選択し、バイト列で更新
update_bytes = b'Python123'
my_hash1.update(update_bytes)
print("Result after digesting: " + str(my_hash1.hexdigest()))
print("Digest Size: " + str(my_hash1.digest_size))
my_hash2 = hashlib.sha256() # 同じバイト列でSHA256を選択
my_hash2.update(update_bytes)
print("Result after digesting: " + str(my_hash2.hexdigest()))
print("Digest Size: " + str(my_hash2.digest_size))

実行結果

Result after digesting: ae35eacb1cb6f6d38c29a04ecb2d7471
Digest Size: 16
Result after digesting: bba32ba33d6a7f3e02a96e2d7ee6860765780aee42b878007369e373ff419b1e
Digest Size: 32

同じ入力データ「Python123」に対して、MD5では16バイト(16進数32桁)、SHA256では32バイト(16進数64桁)のダイジェストが生成されていることが確認できます。

注意: MD5やSHA1は衝突耐性の面で脆弱性が指摘されており、現在ではセキュリティ目的での使用は推奨されません。パスワードの保存やデジタル署名など、安全性が求められる場面ではSHA256以上の強度を持つアルゴリズムを選択しましょう。


  1. Python Tkinterのafter()メソッドの使い方を徹底解説

    Tkinterは、PythonでGUIアプリケーションを作成するための標準ライブラリです。ウィンドウやボタン、ラベルなどのウィジェットを作成・操作するための組み込みメソッドが多数用意されており、データの表示やGUIイベントの処理を簡単に実装できます。本記事では、その中でも特に便利なafter()メソッドの使い方について、具体的なコード例とともに詳しく解説します。after()メソッドの基本構文.after(delay, FuncName=FuncName)このメソッドは、指定した遅延時間(ミリ秒単位)が経過した後に、引数として渡した関数FuncNameを呼び出します。タイマー処理や定期的な更新

  2. 【初心者向け】Pythonのgetattr()関数とsetattr()関数の違いをわかりやすく解説

    getattr()関数とはgetattr()関数は、Pythonの組み込み関数の一つで、オブジェクトが持つ「指定した名前の属性」の値を取得するために使われます。もし属性が見つからない場合は、あらかじめ指定しておいたデフォルト値を返すことができるのが特徴です。基本構文getattr(object, name[, default])パラメータobject:属性を取得したい対象のオブジェクトname:取得したい属性の名前(文字列で指定)default(省略可能):属性が存在しなかった場合に返す代替の値戻り値指定した名前の属性が存在する場合 → その属性の値属性が存在せず、defaultが指定されてい