現在の位置: ホーム> 最新記事一覧> PHPでhash_finalとhash_hmacを使用する方法は?

PHPでhash_finalとhash_hmacを使用する方法は?

gitbox 2025-05-27

PHPプログラミングでは、ハッシュアルゴリズムはデータ暗号化と検証の中心部分です。特に、機密情報を処理する場合、ハッシュアルゴリズムの合理的な使用は、システムのセキュリティを効果的に改善できます。 PHPでは、 hash_final関数とhash_hmac関数の組み合わせは、より強力なハッシュ処理機能を提供できます。この記事では、これら2つの機能をPHPで組み合わせて、より安全なハッシュ処理を実現する方法を詳細に紹介します。

1. Hash_finalおよびhash_hmacの基本的な紹介

HASH_HMAC関数

HASH_HMACはPHPの組み込み関数であり、指定されたハッシュアルゴリズムを使用して、指定されたキーとメッセージコンテンツを使用してハッシュ値を生成できます。 HMAC(ハッシュベースのメッセージ認証コード)は、ハッシュ関数に基づくメッセージ認証コードであり、データの整合性の検証と認証に広く使用されています。

関数構文:

 hash_hmac(string $algo, string $data, string $key, bool $raw_output = false): string
  • $ algo :ハッシュアルゴリズム( SHA256MD5などなど)を指定します。

  • $データ:ハッシュする必要があるメッセージデータ。

  • $キー:ハッシュ計算に使用されるキー。

  • $ raw_outputtrueに設定されている場合、生のバイナリデータは出力されます。デフォルトはfalseです。つまり、16進に関する文字列は出力です。

hash_final関数

HASH_FINALは、ストリーミングハッシュ計算を使用するときに最終的なハッシュ値を取得するためのPHPの別の関数です。 hash_initを介してハッシュコンテキストを初期化した後、 hash_updateを介してデータを追加してから、 hash_finalを呼び出して最終的なハッシュ値を取得できます。

関数構文:

 hash_final(resource $context, bool $raw_output = false): string
  • $コンテキストHASH_INITによって返されたハッシュコンテキスト。

  • $ raw_output :生のバイナリデータを返すかどうかを指定します。

2。Hash_HMACHASH_FINALを使用して、より安全なハッシュ処理を実現します

特に機密データの送信とストレージの場合、データセキュリティを改善するために、より複雑なハッシュ処理にはhash_hmachash_finalを使用できます。特定の手順は次のとおりです。

ステップ1:ハッシュコンテキストを初期化します

まず、 HASH_INITを使用してハッシュコンテキストを初期化して、その後のハッシュ操作に備えます。ここでは、 SHA256またはその他の強力なハッシュアルゴリズムを使用することを選択できます。

 $context = hash_init('sha256');

ステップ2:データを更新します

次に、 hash_updateを使用して、ハッシュコンテキストにハッシュする必要があるデータを段階的に追加します。複数のデータブロックを順番に追加できます。

 $data = "Sensitive data to hash";
hash_update($context, $data);

ステップ3: HASH_HMACと組み合わせた暗号化

セキュリティをさらに向上させるために、 HASH_HMACを使用してHASH_HMACで暗号化して、認証とともにHASH値を生成できます。これは、中間の攻撃などのセキュリティ問題を防ぐために非常に重要です。

 $key = "secret-key";
$hmac_hash = hash_hmac('sha256', $data, $key);

ステップ4:最終的なハッシュ値を取得します

最後に、 hash_finalを使用して、ハッシュコンテキストから最終的なハッシュ値を取得します。 $ raw_outputtrueに設定されている場合、バイナリデータが返されます。

 $final_hash = hash_final($context, false);  // 最終的なハッシュ値を取得します(16価格設定)

ステップ5:両方のハッシュ結果をマージします

HASHのセキュリティを強化するために、 HASH_HMACHASH_FINALの結果を一緒に使用できます。たとえば、2つのハッシュ結果をマージし、ハッシュ処理を再度実行します。

 $combined_hash = hash('sha256', $final_hash . $hmac_hash);

このようにして、HMACとストリーミングハッシュを組み合わせた最終結果が得られます。これにより、データの完全性が保証されるだけでなく、データが改ざんまたは偽造されていることも回避されます。

3。サンプルコード

以下は、より安全なハッシュ処理を実現するためにPHPでHASH_FINAL機能とHASH_HMACを組み合わせる方法を示す完全なコード例を示します。

 <?php
// ハッシュコンテキストを初期化します
$context = hash_init('sha256');

// ハッシュする必要があるデータ
$data = "Sensitive data to hash";

// ハッシュコンテキストにデータを更新します
hash_update($context, $data);

// 実行するキーを設定しますHMAC暗号化
$key = "secret-key";
$hmac_hash = hash_hmac('sha256', $data, $key);

// 最終的なハッシュ値を取得します
$final_hash = hash_final($context, false);  // 得る16価格設定字符串

// ハッシュ結果をマージし、最終的なハッシュを生成します
$combined_hash = hash('sha256', $final_hash . $hmac_hash);

// 最終的なハッシュ値を出力します
echo "Final Hash: " . $combined_hash;
?>

4。結論

Hash_finalhash_hmacの組み合わせは、特に機密データを処理する場合、ハッシュ処理のセキュリティを大幅に強化できます。 HASH_HMACは、ハッシュプロセスにキー認証の追加レイヤーを追加できますが、 Hash_Finalはハッシュデータをストリーミングする方法を提供します。この2つを組み合わせることで、データの整合性とセキュリティをより適切に保護し、送信中およびストレージ中にデータが改ざんされないようにします。