現在の位置: ホーム> 最新記事一覧> php hash()関数を使用して、HMAC(ハッシュベースのメッセージ認証コード)を生成します

php hash()関数を使用して、HMAC(ハッシュベースのメッセージ認証コード)を生成します

gitbox 2025-07-01

ネットワークのセキュリティとデータの整合性検証では、HMAC(ハッシュベースのメッセージ認証コード)は、一般的に使用される効果的な技術です。ハッシュ関数とキーを組み合わせて、メッセージの整合性とアイデンティティ認証を確認します。 PHPの組み込みHash_hmac()関数は、HMACを生成するための便利なツールを提供しますが、この記事では、より基本的なHash()関数を使用してHMACを手動で実装する方法を紹介します。

HMACとは何ですか?

HMACの核となるアイデアは、メッセージの前後にキーをスプライスし、スプライスの後に文字列をハッシュすることです。単純なハッシュ値と比較して、HMACはメッセージが改ざんされなくなり、簡単に偽造されないことを効果的に防ぐことができます。

HMAC計算式:

 HMAC(key, message) = hash((key ⊕ opad) || hash((key ⊕ ipad) || message))

で:

  • ||接続操作を意味します

  • bitiveビットワイズxorを示します

  • Opadは外部塗りつぶし、0x5c繰り返し塗りつぶしです

  • iPadは内部塗りつぶし、0x36繰り返し塗りつぶしです

PHPでHash()関数を使用してHMACを実装します

以下は、php hash()関数を使用してHMACを手動で実装する方法を示しています。

 <?php
function hmac_hash($algo, $key, $data) {
    $blocksize = 64; // ほとんどhash関数ブロックサイズはです64バイト
    if (strlen($key) > $blocksize) {
        $key = hash($algo, $key, true); // キーが長すぎる場合,初めhash固定長のバイナリ文字列を形成します
    }
    $key = str_pad($key, $blocksize, chr(0x00)); // サイズをブロックするキーを入力します

    $ipad = str_repeat(chr(0x36), $blocksize);
    $opad = str_repeat(chr(0x5c), $blocksize);

    $inner = $key ^ $ipad;
    $outer = $key ^ $opad;

    $inner_hash = hash($algo, $inner . $data, true); // 内側のハッシュ,出力バイナリ形式
    $hmac = hash($algo, $outer . $inner_hash);

    return $hmac;
}

// テスト
$key = "secretkey";
$message = "The quick brown fox jumps over the lazy dog";

echo "HMAC-SHA256: " . hmac_hash('sha256', $key, $message);
?>

上記のコードでは、SHA-256アルゴリズムを使用して、メッセージとキーでHMAC計算を実行し、16進文字列を返します。

実際のアプリケーションのメモ

  • より効率的で安全なPHPに付属するHASH_HMAC()関数を使用することをお勧めします。

  • 一般に、キーの長さはハッシュブロックサイズと同じであることをお勧めします。

  • バイナリ出力(3番目のパラメーターがtrueに設定されている)を使用することは、スプライシング操作を助長します。

  • HMACは主にメッセージ認証に使用されており、キーを安全に管理する必要があります。

要約します

PHPには既に便利なHasH_HMAC()関数がありますが、HMACを実装するために基本的なHash()関数を使用する原則を理解して習得することで、安全なハッシュメカニズムをよりよく理解し、安全なプログラミング機能を改善するのに役立ちます。

もっと知りたい場合は、 https://gitbox.net関連のリソースにアクセスできます。