현재 위치: > 최신 기사 목록> Hash_Final을 사용하여 PHP에서 데이터 무결성 검증을 달성하는 방법은 무엇입니까?

Hash_Final을 사용하여 PHP에서 데이터 무결성 검증을 달성하는 방법은 무엇입니까?

gitbox 2025-05-29

현대 웹 개발에서 데이터 무결성 검증은 매우 중요한 작업입니다. 데이터 전송 또는 스토리지 중에 데이터가 변조되거나 손상되지 않도록해야합니다. PHP는 개발자 가이 요구 사항을 달성 할 수 있도록 다양한 해시 관련 기능을 제공하며, 그 중 hash_final () 중 해시 컨텍스트 처리에 사용되는 핵심 기능 중 하나입니다. 이 기사는 Hash_Final () 의 목적, 작동 원리 및 데이터 무결성 검증을 위해 실제 프로젝트에서 사용하는 방법에 대해 자세히 분석합니다.

1. hash_final이란 무엇입니까?

Hash_final ()은 PHP가 제공 한 해시 확장에서 증분 해시 작업에서 최종 해시 값을 얻기 위해 함수입니다. 일반적으로 hash_init ()hash_update () 와 함께 사용되며 세그먼트에서 해시 값을 계산 해야하는 큰 파일 또는 시나리오를 처리하는 데 적합합니다.

기본 사용 :

 string hash_final ( HashContext $context [, bool $raw_output = false ] )
  • $ 컨텍스트 : hash_init () 에 의해 생성 된 해시 컨텍스트.

  • $ raw_output (선택 사항) : true 인 경우 원래 바이너리 형식으로 해시 값을 출력하고 그렇지 않으면 16 진수 문자열을 출력합니다.

2. 왜 해시 () 대신 hash_final을 사용합니까?

Hash () 함수는 한 번에 문자열 또는 파일의 해시 값을 계산할 수 있지만 Hash_Final () 은 다음 시나리오에서 더 적합합니다.

  1. 큰 파일 또는 스트리밍 데이터 처리 :
    전체 파일을 한 번에 메모리로 읽으면 메모리 오버플로가 발생할 수 있으며 Hash_Init () + hash_update ()를 사용하면 세그먼트에서 파일을 읽고 해시를 단계별로 업데이트 할 수 있습니다.

  2. 다단계 처리 :
    데이터가 청크 (예 : 네트워크 스트림 또는 분산 시스템의 조각난 데이터)로 수신되면 해시를 점차 업데이트 할 수 있으며 최종적으로 Hash_Final ()을 사용하여 결과를 생성 할 수 있습니다.

  3. 보다 유연한 제어 :
    해싱 알고리즘을 동적으로 선택할 수 있으며 중간의 비즈니스 요구에 따라 처리 로직을 조정할 수 있습니다.

3. 실제 응용 프로그램 : 파일 무결성을 확인하십시오

다음은 파일 무결성을 확인하기 위해 hash_final ()을 사용하는 예입니다.

 <?php
$file = 'largefile.zip';
$expectedHash = 'e99a18c428cb38d5f260853678922e03'; // 예상되는MD5해시 가치

$context = hash_init('md5');
$handle = fopen($file, 'rb');

if (!$handle) {
    die("파일을 열 수 없습니다: $file");
}

while (!feof($handle)) {
    $data = fread($handle, 8192); // 각각 읽습니다8KB
    hash_update($context, $data);
}

fclose($handle);

$calculatedHash = hash_final($context);

if ($calculatedHash === $expectedHash) {
    echo "파일 무결성 확인이 통과되었습니다。";
} else {
    echo "파일이 손상되거나 변조되었습니다。";
}
?>

4. 확인을 위해 URL 데이터를 사용하십시오

원격 파일의 무결성을 확인 해야하는 경우 fopen ()을 사용하여 원격 스트림을 열 수 있습니다 ( allow_url_fopen이 활성화되어 있는지 확인) :

 <?php
$url = 'https://gitbox.net/files/sample.zip';
$expectedSha256 = '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08';

$context = hash_init('sha256');
$handle = fopen($url, 'rb');

if (!$handle) {
    die("열 수 없습니다URL: $url");
}

while (!feof($handle)) {
    $data = fread($handle, 8192);
    hash_update($context, $data);
}

fclose($handle);

$calculatedSha256 = hash_final($context);

if ($calculatedSha256 === $expectedSha256) {
    echo "远程파일 무결성 확인이 통과되었습니다。";
} else {
    echo "远程파일이 손상되거나 변조되었습니다。";
}
?>