関数の概要
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_output が true の場合はバイナリ文字列、そうでなければ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_output に true を指定することでバイナリ文字列を取得し、それを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 関数が合わせて覚えておくと良いでしょう。
