HASH_Final 함수는 해시 값을 생성하는 PHP의 함수입니다. 일반적으로 Hash_init 및 Hash_update 와 함께 사용하여 해시 컨텍스트를 작성하고 데이터를 단계별로 업데이트합니다. Hash_final은 해시 작업을 완료하고 최종 해시 값을 반환하는 데 사용됩니다.
string hash_final ( resource $context [, bool $raw_output = false ] )
$ 컨텍스트 : 해시 컨텍스트는 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 서버로 전송됩니다. 다음은 생성 된 서명을 게시물 요청에 첨부하는 방법을 보여주는 간단한 예입니다.
$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 서버는 동일한 서명 알고리즘을 사용하여 요청의 정당성을 확인할 수 있습니다.