この記事では、PythonでHMAC(Hash-based Message Authentication Code、ハッシュベースメッセージ認証コード)を使用する方法について解説します。具体的なコード例、その詳細解説、および応用例を2つ掲載しています。
目次
はじめに
HMACはデータの完全性と認証を保証する手法の一つです。通信やデータストレージで広く利用されています。Pythonでも`hashlib`ライブラリを使って簡単に実装できます。
HMACの基本
HMACは、メッセージと秘密鍵を組み合わせて、ユニークなハッシュ値を生成します。このハッシュ値は、データが改ざんされていないか確認する際や、送信者が正当であるかを確認する際に使用されます。
PythonでのHMACの基本的な使い方
import hashlib
import hmac
key = b'secret_key' # 秘密鍵
message = b'message' # メッセージ
# HMACオブジェクトの作成
hmac_object = hmac.new(key, message, hashlib.sha256)
# HMACハッシュ値の取得
hmac_hash = hmac_object.hexdigest()
print(hmac_hash)
このコードは`hashlib`と`hmac`ライブラリを使用しています。まず`hmac.new()`関数でHMACオブジェクトを作成し、`hexdigest()`メソッドでHMACハッシュ値を16進数で取得します。
応用例
応用例1: ファイルの完全性チェック
ファイルのダウンロード時やバックアップ時に、その完全性をHMACで確認する例です。
import hashlib
import hmac
def check_file_integrity(file_path, key):
# ファイルをバイナリモードで読み込む
with open(file_path, 'rb') as f:
file_data = f.read()
# HMACハッシュ値の計算
hmac_object = hmac.new(key, file_data, hashlib.sha256)
return hmac_object.hexdigest()
key = b'secret_key'
file_hmac = check_file_integrity('example.txt', key)
print(f'HMAC hash of the file: {file_hmac}')
このコードでは、`check_file_integrity`関数を使ってファイルの完全性を確認しています。関数はファイルパスと秘密鍵を引数に取り、HMACハッシュ値を返します。
応用例2: API認証
APIのリクエストにHMACを添付し、サーバーでその認証を行う例です。
import requests
# APIエンドポイントと認証情報
api_endpoint = "https://example.com/api/resource"
key = b'secret_key'
payload = {'param1': 'value1', 'param2': 'value2'}
# HMACハッシュ値の計算
hmac_object = hmac.new(key, str(payload).encode(), hashlib.sha256)
hmac_hash = hmac_object.hexdigest()
# APIリクエスト
headers = {'Authorization': f'HMAC {hmac_hash}'}
response = requests.get(api_endpoint, params=payload, headers=headers)
この例では`requests`ライブラリを使用してAPIリクエストを行います。HMACハッシュ値を`Authorization`ヘッダーに添付しています。
まとめ
HMACはデータの完全性と認証を確保する手法として非常に有用です。Pythonでの基本的な使い方から、ファイル完全性のチェック、API認証まで、多くの場面で活用することができます。
コメント