Hash_final은 해시 값을 계산하는 PHP의 함수입니다. 해시 작업을 완료하고 최종 해시 값을 반환하는 데 사용됩니다. Hash_final 은 일반적으로 Hash_init 및 Hash_update 와 함께 사용하여 완전한 해시 계산 프로세스를 형성합니다.
<?php
$data = "Hello, GitBox!";
$context = hash_init('sha256'); // 초기화 SHA256 해시 알고리즘
hash_update($context, $data); // 해시 값을 업데이트하십시오
$hash = hash_final($context); // 최종 해시 값을 얻으십시오
echo $hash; // 출력 해시 값
?>
이 예에서는 Hash_Init을 사용하여 SHA256 HASH 컨텍스트를 초기화하고 Hash_Update를 통해 데이터를 지속적으로 업데이트하고 마지막으로 Hash_Final을 통해 최종 해시 값을 얻습니다. Hash_Final 에 대한 빈번한 호출은 많은 양의 데이터를 처리 할 때 메모리 사용량을 최적화하는 데 도움이 될 수 있습니다. 모든 데이터를 한 번에 계산할 때 메모리 사용을 피할 수 있기 때문입니다.
Hash_copy 함수는 이미 존재하는 해시 컨텍스트를 복사하는 데 사용됩니다. 이런 식으로, 우리는 모든 데이터를 다시 계산하지 않고도 일부 계산 된 해시 컨텍스트를 다른 새로운 컨텍스트에 복사 할 수 있습니다. HASH_COPY 의 사용은 특히 계산 프로세스를 일시적으로 저장하거나 분할 해야하는 경우에 특히 적합하지만, 처음부터 해시를 다시 시작하고 싶지는 않습니다.
<?php
$data1 = "Data Part 1";
$data2 = "Data Part 2";
$context1 = hash_init('sha256'); // 초기화 SHA256 해시 알고리즘
hash_update($context1, $data1); // 해시 값을 업데이트하십시오
$context2 = hash_copy($context1); // 해시 컨텍스트를 복사하십시오
hash_update($context2, $data2); // 데이터의 두 번째 부분을 업데이트하십시오
$hash1 = hash_final($context1); // 데이터의 첫 부분의 해시를 얻으십시오.
$hash2 = hash_final($context2); // 데이터의 두 번째 부분의 해시를 얻으십시오.
echo "Hash 1: " . $hash1 . "\n";
echo "Hash 2: " . $hash2 . "\n";
?>
위의 코드에서는 첫 번째 데이터의 해시 컨텍스트를 Hash_copy를 통해 복사하고 데이터의 두 번째 부분의 해시 계산을 계속합니다. 이런 식으로, 우리는 전체 데이터의 해시를 처음부터 다시 계산하지 않아 성능이 향상됩니다.
HASH_FINAL 및 HASH_COPY 기능의 합리적인 조합은 해시 계산의 성능을 효과적으로 향상시킬 수 있습니다. 특히 대규모 데이터 세트를 처리 할 때 모든 데이터의 해시 값을 한 번에 직접 계산하면 많은 메모리 및 컴퓨팅 리소스가 필요합니다. 성능은 다음과 같은 방식으로 최적화 할 수 있습니다.
세분화 : 큰 파일 또는 대형 데이터 세트의 경우 Hash_Init 및 Hash_update를 사용하여 메모리 사용을 줄이기 위해 모든 데이터를 한 번에 계산하는 대신 세그먼트의 해시 값을 계산하십시오.
컨텍스트 사본 : 계산 프로세스 중에 여러 부분의 데이터를 처리 해야하는 경우 Hash_Copy를 사용하여 해시 컨텍스트를 복사하여 계산을 다시 시작하지 않고 계산 간접비를 줄일 수 있습니다.
지연 계산 : 여러 독립 해시 계산 작업을 처리 할 때 모든 데이터가 최종 계산 준비가 될 때까지 해시 콜 호출을 연기하십시오. 이는 불필요한 중간 계산을 줄이는 데 도움이됩니다.
Hash_final 및 Hash_copy 의 성능 장점을보다 직관적으로 입증하기 위해 두 가지 구현 방법을 비교하는 것을 고려할 수 있습니다.
전통적인 방법 : 모든 데이터의 해시 값을 한 번에 계산합니다.
최적화 방법 : 세그먼트의 해시 컨텍스트 계산 및 복사
다음은 두 가지 방법의 비교입니다.
<?php
$data = "Some large data...";
$hash = hash('sha256', $data); // 모든 데이터의 해시 값을 한 번에 계산하십시오
echo $hash;
?>
<?php
$data = "Some large data...";
$context = hash_init('sha256');
hash_update($context, substr($data, 0, 1000)); // 세분화 계산
$context2 = hash_copy($context);
hash_update($context2, substr($data, 1000, 1000)); // 계속 계산하십시오
$hash1 = hash_final($context); // 첫 번째 부분의 해시를 얻으십시오
$hash2 = hash_final($context2); // 두 번째 부분의 해시를 얻으십시오
echo $hash1 . $hash2;
?>
위의 비교를 통해 최적화 된 계산 방법이 세분화 처리 및 HASH_Copy를 통해 메모리 소비를 효과적으로 감소시키고 성능을 향상 시킨다는 것을 알 수 있습니다.