hash_hmac_file

関数の概要

hash_hmac_file は、指定したファイルの内容に対してHMAC(Hash-based Message Authentication Code)を計算するPHPの組み込み関数です。HMACはメッセージの完全性と認証を確認するためのハッシュで、秘密鍵を用いるため改ざん検知に有効です。この関数を使うと大きなファイルでも直接読み取り、効率よくHMACを生成できます。

パラメータの説明

  • algo (string) : 使用するハッシュアルゴリズム名。例として「sha256」や「md5」が指定できます。
  • filename (string) : ハッシュを計算したいファイルのパス。
  • key (string) : HMAC計算に使う秘密鍵。
  • raw_output (bool, 任意) : trueの場合、バイナリ形式で結果を返します。デフォルトは false で、16進数の文字列として返されます。

戻り値

ファイル内容に対するHMACハッシュ値を文字列で返します。raw_outputtrue の場合はバイナリ文字列、そうでなければ16進数の文字列を返します。ファイルが読み込めない場合やアルゴリズムが未対応の場合は false を返します。

使用例

基本的な使い方

<?php
$hash = hash_hmac_file('sha256', 'example.txt', 'secret-key');
echo $hash;
?>

ファイル example.txt の内容を「sha256」アルゴリズムで、鍵「secret-key」を使ってHMACを計算し、16進数のハッシュ文字列を表示します。

バイナリ形式で結果を取得する

<?php
$hashBinary = hash_hmac_file('sha1', 'sample.txt', 'my-secret', true);
echo bin2hex($hashBinary);
?>

raw_outputtrue を指定することでバイナリ文字列を取得し、それを16進数に変換して表示しています。バイナリ形式はさらに別の処理に利用しやすい場合があります。

実務でのファイル認証に利用する例

<?php
$file = 'upload/document.pdf';
$key = 'supersecretkey';

// ファイルのHMACを取得
$hmac = hash_hmac_file('sha256', $file, $key);

// データベースや送信データと比較し、改ざん検知に利用
if ($hmac === $_POST['hmac']) {
    echo "ファイル認証に成功しました。";
} else {
    echo "ファイルが変更された可能性があります。";
}
?>

アップロードされたファイルの正当性を確認するためにHMACを利用。送信されたHMACと比較して改ざん検知に役立てています。

関連する関数

  • hash_hmac:文字列に対してHMACを計算する関数。
  • hash_file:ファイルの通常のハッシュ値を計算する関数。
  • hash:文字列の単純なハッシュ値を計算する関数。

まとめ

hash_hmac_file はファイルの内容を対象にHMACを効率的に計算できる便利な関数です。セキュリティ分野でファイルの改ざん検知や認証に役立つため、実務でもよく使われます。アルゴリズムや鍵の選定に注意しつつ活用しましょう。より簡単に使いたい場合や文字列のHMAC計算は hash_hmac 関数が合わせて覚えておくと良いでしょう。