HASH_FINAL関数は、ハッシュ値を生成するPHPの関数です。通常、 HASH_INITとHASH_UPDATEで使用され、ハッシュコンテキストを作成し、データを段階的に更新します。 Hash_finalは、ハッシュ操作を完了し、最終的なハッシュ値を返すために使用されます。
string hash_final ( resource $context [, bool $raw_output = false ] )
$ context : hash_init関数によって初期化されたハッシュコンテキストです。
$ raw_output : trueに設定されている場合、ハッシュ値をバイナリ形式で返します。 falseに設定した場合、ハッシュ値を16進形式で返します。
多くのAPIでは、ネットワークリクエストに署名パラメーターを添付する必要があり、署名は通常、要求パラメーターとキーの暗号化ハッシュの結果です。目的は、リクエストが改ざんされないようにすることです。ハッシュ関数を使用して署名を生成することにより、送信中に要求されたコンテンツの一貫性とセキュリティを確保できます。
PHPを介して署名を生成し、 Hash_Final関数を使用してこのプロセスを完了する必要があるとします。特定の手順は次のとおりです。
ハッシュコンテキストの初期化:
まず、 hash_initを使用してハッシュコンテキストを初期化し、適切なハッシュアルゴリズム( SHA256など)を選択します。
$context = hash_init('sha256');
ハッシュコンテキストを更新します:
次に、ハッシュコンテキストにリクエストパラメーターとキーを徐々に追加します。ここでは、要求されたパラメーターを例として受け取ります。
$params = [
'method' => 'POST',
'url' => 'https://gitbox.net/api/v1/order',
'timestamp' => time(),
'api_key' => 'your_api_key'
];
foreach ($params as $key => $value) {
hash_update($context, $key . '=' . $value);
}
最終的な署名を生成します:
最終的なハッシュ値は、hash_final関数を介した署名として生成されます。ここでは、16進形式を使用することを選択します。
$signature = hash_final($context, false);
署名を生成し、APIリクエストに追加する方法を示す完全なサンプルコードを次に示します。
<?php
// ハッシュコンテキストを初期化します
$context = hash_init('sha256');
// リクエストパラメーター
$params = [
'method' => 'POST',
'url' => 'https://gitbox.net/api/v1/order',
'timestamp' => time(),
'api_key' => 'your_api_key'
];
// 将リクエストパラメーター添加到哈希上下文
foreach ($params as $key => $value) {
hash_update($context, $key . '=' . $value);
}
// 署名を生成します
$signature = hash_final($context, false);
// 署名結果を印刷します
echo 'Generated Signature: ' . $signature;
// 生成された署名をさらに使用して、ネットワークリクエストを作成します
// サンプルリクエスト
$request_data = [
'method' => 'POST',
'url' => 'https://gitbox.net/api/v1/order',
'timestamp' => time(),
'api_key' => 'your_api_key',
'signature' => $signature
];
// リクエストを実行するコード
// ここで使用しますcURL必要に応じてリクエストを送信してください,リクエストデータを渡します
?>
実際のアプリケーションでは、署名が生成された後、通常、リクエストの一部としてAPIサーバーに送信されます。生成された署名をPOSTリクエストに添付する方法を示す簡単な例を以下に示します。
$ch = curl_init();
// 構成cURL聞く
curl_setopt($ch, CURLOPT_URL, 'https://gitbox.net/api/v1/order');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($request_data));
// 埋め込むcURL聞く
$response = curl_exec($ch);
// 閉鎖cURLセッション
curl_close($ch);
// 出力応答
echo $response;
このようにして、リクエスト内のデータが送信中に改ざんされていないことを確認でき、APIサーバーは同じ署名アルゴリズムを使用してリクエストの正当性を確認できます。