현재 위치: > 최신 기사 목록> Hash_update와 함께 php hash_final을 사용할 때

Hash_update와 함께 php hash_final을 사용할 때

gitbox 2025-05-20

PHP에서 해시 작업을 처리 할 때 기능 세트 Hash_init () , hash_update ()hash_final () 은 매우 강력한 조합입니다. 그들은 큰 파일 또는 청크 데이터를 처리하는 데 적합한 해시 값을 계산하는 스트리밍 (세그먼트) 방법을 제공하며 한 번에 해시 () 함수를 사용하는 것보다 더 효율적입니다.

이 기사는 hash_update ()hash_final ()을 올바르게 사용하는 방법을 자세히 설명하고주의를 기울일 것들을 지적합니다.

기본 사용

이 세 가지 기능의 기본 프로세스는 다음과 같습니다.

  1. 해시 컨텍스트 초기화 :

     $context = hash_init('sha256');
    
  2. 여러 번 업데이트 된 데이터 :

     hash_update($context, '데이터의 일부1');
    hash_update($context, '데이터의 일부2');
    
  3. 최종 해시 값을 얻으십시오.

     $hash = hash_final($context);
    

Complete example:

 <?php
$context = hash_init('sha256');

hash_update($context, 'Hello ');
hash_update($context, 'World!');

$finalHash = hash_final($context);

echo "최종 해시 값: " . $finalHash;
?>

주목해야 할 것

1 ??? hash_final () 이 호출 된 후에 컨텍스트를 다시 사용할 수 없습니다.

전화 할 때 :

 $hash = hash_final($context);

컨텍스트 $ 컨텍스트 가 파괴되며 더 이상 hash_update () 또는 hash_final ()을 계속 호출하는 데 사용할 수 없으며, 그렇지 않으면 오류 가보고됩니다.

동일한 데이터 스트림에서 다른 해시를 계속 계산하려면 Hash_Init ()를 다시 호출해야합니다.

2 ?? Hash_copy ()를 분기로 사용하십시오

동일한 컨텍스트를 기반으로 여러 분기 결과를 얻어야하는 경우 hash_copy ()를 사용할 수 있습니다.

 $context = hash_init('sha256');
hash_update($context, '데이터의 일부');

$copy = hash_copy($context);

hash_update($context, '후속A');
$hashA = hash_final($context);

hash_update($copy, '후속B');
$hashB = hash_final($copy);

이런 식으로 $ hasha$ hashb는 다른 지점의 결과입니다.

3 ???? 큰 파일을 처리 할 때 블록별로 업데이트하십시오

큰 파일의 경우 청크에서 hash_update ()를 읽고 전화 할 수 있습니다.

 <?php
$context = hash_init('sha256');

$handle = fopen('largefile.bin', 'rb');
while (!feof($handle)) {
    $chunk = fread($handle, 8192);
    hash_update($context, $chunk);
}
fclose($handle);

$finalHash = hash_final($context);
echo "큰 파일 해시 값: " . $finalHash;
?>

이것은 한 번에 파일을 읽음으로써 발생하는 메모리 압력을 피합니다.

4 ?? URL 시나리오에서 사용합니다

예를 들어 HTTP 요청을 통해 데이터를 스트리밍하는 경우 다음과 같습니다.

 <?php
$url = 'https://gitbox.net/sample-file.bin';
$context = hash_init('sha256');

$handle = fopen($url, 'rb');
if ($handle) {
    while (!feof($handle)) {
        $chunk = fread($handle, 8192);
        hash_update($context, $chunk);
    }
    fclose($handle);

    $finalHash = hash_final($context);
    echo "원격 파일 해시 값: " . $finalHash;
} else {
    echo "열 수 없습니다 URL。";
}
?>

조심하십시오 : php.ini 에서 allow_url_fopen이 활성화되어 있는지 확인하십시오. 그렇지 않으면 fopen () 이 URL을 직접 열 수 없습니다.

5 ?? 올바른 알고리즘을 선택하십시오

hash_init () 의 첫 번째 매개 변수는 알고리즘 이름입니다. 오래된 MD5 또는 SHA1 대신 SHA256SHA512 와 같은 최신 알고리즘을 사용하는 것이 좋습니다. 후자는 더 이상 안전하지 않기 때문입니다.