php에서 Hash_update_stream 및 Hash_file () 은 해시 값을 생성하는 데 사용되는 함수이지만 다르게 사용되므로 경우에 따라 해시 값이 발생할 수 있습니다. 이 기사는이 두 기능을 분석하고 해시 값의 일관성을 탐색합니다.
hash_update_stream 함수는 스트림을 통해 해시 값을 점차 업데이트하는 데 사용됩니다. 이 기능을 사용할 때는 리소스 스트림 (예 : 파일 스트림)을 제공 한 다음 Hash_update_stream을 여러 번 호출하여 해시 계산을 업데이트해야합니다. 이 방법은 일반적으로 데이터를 블록별로 읽어야하는 시나리오에 적합합니다.
<?php
$hash = hash_init('sha256'); // 초기화 해싱 알고리즘은 다음과 같습니다 sha256
$fp = fopen('sample.txt', 'rb'); // 파일 스트림을 엽니 다
// 스트림을 통해 해시 값을 업데이트하십시오
while (!feof($fp)) {
$data = fread($fp, 4096); // 블록으로 파일 내용을 읽습니다
hash_update_stream($hash, $data); // 해시 값을 업데이트하십시오
}
fclose($fp);
// 최종 해시 값을 얻으십시오
echo hash_final($hash);
?>
Hash_update_stream 과 달리 Hash_file ()은 블록으로 데이터 블록을 읽지 않고 파일을 직접 해시하는 간단한 기능입니다. 내부적으로 파일의 읽기를 자동으로 처리하고 해시 값을 생성합니다.
<?php
// 사용 hash_file 파일의 해시 값을 직접 계산하십시오
$hash_value = hash_file('sha256', 'sample.txt');
echo $hash_value;
?>
hash_update_stream 과 hash_file () 모두 파일의 해시 값을 생성하는 데 사용될 수 있지만 약간 다르게 계산되므로 해시 값의 차이를 유발할 수 있습니다. 이 두 기능은 이론적으로 동일한 결과를 제공해야하지만 Hash_update_stream은 해시 값을 점차 업데이트하고 파일 스트림을 읽는 방식에 따라 전체 파일에서 해시 계산을 직접 계산하기 때문 입니다 . 경우에 따라 스트림 읽기의 버퍼 크기와 같은 요소가 읽기 순서는 해시 값의 생성에 영향을 줄 수 있습니다.
그러나 표준 사용 시나리오에서 파일이 변경되지 않고 다른 방해가없는 경우 Hash_update_stream 및 Hash_file () 에 의해 생성 된 해시 값은 동일해야합니다. 이는 동일한 해싱 알고리즘을 사용하고 해싱을 계산할 때 사용되는 데이터가 정확히 일관되기 때문입니다.
Hash_update_stream은 큰 파일 또는 스트리밍 데이터가있는 시나리오에 적합한 해시 값을 점차 업데이트하는 방법입니다.
Hash_file ()은 파일의 해시 값을 계산하는 편리한 방법으로 파일의 해시 계산에 직접 적합합니다.
이론적으로 표준 조건에서 Hash_update_stream 및 Hash_file () 에 의해 생성 된 해시 값은 일관성이 있어야하지만, 다른 판독 방법이 계산 결과에 영향을 줄 수 있음에 주목해야합니다.
실제 개발에서 파일의 해시 값을 단순히 계산하면 hash_file ()을 사용하는 것이 가장 쉽고 효율적인 선택입니다. 데이터를 단계별로 읽고 해시 값을 업데이트 해야하는 경우 Hash_update_stream이 더 나은 선택이됩니다.