현재 위치: > 최신 기사 목록> PHP에서 hash_final을 사용하여 SHA-256 해시를 생성하는 방법은 무엇입니까?

PHP에서 hash_final을 사용하여 SHA-256 해시를 생성하는 방법은 무엇입니까?

gitbox 2025-05-27

php에서 hash_final ()은 hash_init ()hash_update () 와 함께 사용되는 함수입니다. 이 함수 세트는 특히 큰 데이터 스트림 또는 세그먼트 된 데이터를 처리하기 위해 hash () 함수를 직접 사용하는 것보다보다 유연한 방법을 제공합니다.

이 기사에서는 Hash_Final ()을 사용하여 SHA-256 해시 값을 생성하는 방법을 설명합니다.

hash_final () 란 무엇입니까?

Hash_final ()은 해시 컨텍스트를 완료하고 최종 해시 값을 반환하는 데 사용됩니다. Hash_init () (해시 컨텍스트 초기화) 및 hash_update () 와 함께 사용됩니다 (컨텍스트에 데이터 추가).

이 접근법은 큰 파일 처리 또는 스트리밍 데이터와 같이 모든 데이터를 한 번에 메모리에 넣을 수 없을 때 특히 적합합니다.

기본 단계

SHA-256 해시를 생성하는 기본 단계는 다음과 같습니다.

1 ??? 해시 컨텍스트를 초기화하십시오
2 ?? 데이터를 세그먼트로 전달합니다
3 ???? 최종 해시 값을 얻으십시오

샘플 코드

다음 코드는 문자열 데이터를 세그먼트에서 처리하는 방법을 보여주고 SHA-256 해시를 생성합니다.

 <?php
// 첫 번째 단계:해시 컨텍스트를 초기화합니다,알고리즘을 AS로 지정하십시오 sha256
$context = hash_init('sha256');

// 2 단계:세그먼트에서 데이터를 업데이트하십시오(여러 번 호출 할 수 있습니다 hash_update)
$dataPart1 = 'Hello, ';
$dataPart2 = 'this is a test ';
$dataPart3 = 'using hash_final().';

hash_update($context, $dataPart1);
hash_update($context, $dataPart2);
hash_update($context, $dataPart3);

// 3 단계:최종 해시 값을 얻으십시오(16 진수 문자열)
$hash = hash_final($context);

echo "마지막 SHA-256 해시 값은입니다: $hash";
?>

출력 예 :

 마지막 SHA-256 해시 값은입니다: 6e4b18e9f8f2de9d4d70f43b8f6b1c7e6812b826ad3b1c5eaf2df62e245b3f94

예 : 파일 스트림 처리

큰 파일에서 SHA-256 해시를 생성하려면 다음을 수행 할 수 있습니다.

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

// 파일 스트림을 엽니 다
$handle = fopen('https://gitbox.net/path/to/largefile.zip', 'rb');
if ($handle === false) {
    die('파일을 열 수 없습니다。');
}

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

fclose($handle);

$hash = hash_final($context);

echo "더럽히는 SHA-256 해시 값은입니다: $hash";
?>

이 예에서는 fopen ()을 사용하여 원격 파일 https://gitbox.net/path/path/toto/largefile.zip을 직접 읽고 블록으로 해시 컨텍스트를 업데이트하고 마지막으로 파일의 SHA-256 해시 값을 얻습니다.

? 작은 데이터 (예 : 문자열)에 대한 해시 만 생성하면 실제로 Hash ()를 직접 사용하는 것이 더 쉽습니다.

 $hash = hash('sha256', 'Hello, this is a test.');

? hash_final ()가 소비 된 후 해시 컨텍스트가 파괴됩니다. 재사용하려면 다시 Hash_Init ()를 호출해야합니다.