현재 위치: > 최신 기사 목록> Hash_equals와 함께 파일 해시 값을 확인하는 방법 ()

Hash_equals와 함께 파일 해시 값을 확인하는 방법 ()

M66 2025-05-27

많은 응용 프로그램에서 파일의 무결성을 확인하는 것이 매우 중요합니다. 특히 파일을 다운로드하거나 업로드해야 할 때 파일이 변조되거나 손상되지 않도록하는 것이 매우 중요합니다. PHP는 파일 해시 검사를 수행하는 다양한 방법을 제공합니다. 여기서 Hash_update_streamHash_equals () 는 일반적으로 사용되는 두 가지 기능입니다.

이 기사에서는 Hash_update_stream 함수를 사용하여 파일을 점진적으로 읽고 해시 값을 계산 한 다음 해시 값 () 함수를 사용하여 계산 된 해시 값을 예상 해시 값과 비교하여 파일의 무결성을 확인하는 방법을 소개합니다.

hash_update_streamhash_equals () 란 무엇입니까?

  • hash_update_stream :이 함수는 데이터 스트림의 해시 값을 계산하는 데 사용됩니다. 큰 파일을 처리 할 때 파일을 청크로 읽고 해시 값을 점차 업데이트함으로써 메모리 오버플로 문제를 효과적으로 피할 수 있습니다.

  • Hash_equals : 이것은 두 가지 해시 값을 비교하기위한 안전한 기능입니다. 타이밍 공격을 방지하고 == 또는 ==의 해시 값으로 인해 시차를 드러내지 않기 때문에 == 또는 ==를 직접 사용하는 것보다 안전합니다.

hash_update_streamhash_equals ()를 사용하여 파일 해시 값을 확인하는 방법?

이미 파일과 예상 해시 값이 있다고 가정하면 아래 단계를 따라 파일의 무결성을 확인하려고합니다.

1 단계 : 파일을 엽니 다

먼저 확인할 파일을 열어야합니다. fopen ()을 사용하여 파일을 엽니 다.

 $file = fopen('path/to/your/file', 'rb');

2 단계 : 해시 컨텍스트를 초기화합니다

그런 다음 hash_init ()를 사용하여 해시 컨텍스트를 초기화하십시오. 여기에서 SHA256을 예로 들어보십시오. 물론 다른 해싱 알고리즘 (예 : MD5 , SHA512 등)을 사용할 수도 있습니다.

 $hashContext = hash_init('sha256');

3 단계 : 단계별 파일을 읽고 해시 값을 업데이트합니다.

파일을 청크로 읽고 Hash_update_stream () 함수를 통해 각 블록의 데이터를 해시 컨텍스트로 업데이트합니다.

 while (!feof($file)) {
    $data = fread($file, 8192); // 읽다8KB데이터 블록
    hash_update_stream($hashContext, $data);
}

4 단계 : 파일의 최종 해시 값 계산

파일을 읽은 후 Hash_Final ()을 사용하여 계산 된 파일 해시 값을 얻으십시오.

 $fileHash = hash_final($hashContext);

5 단계 : 파일 해시를 예상 해시와 비교하십시오

마지막으로, Hash_equals ()를 사용하여 계산 된 파일 해시 값을 예상 해시 값과 안전하게 비교하여 파일이 변조되지 않았는지 확인합니다.

 $expectedHash = '예상 해시 가치'; // 서버 또는 기타 보안 장소 에서이 해시 값을 얻을 수 있습니다.

if (hash_equals($fileHash, $expectedHash)) {
    echo "파일 완료,해시 가치 매칭!";
} else {
    echo "파일이 손상되거나 변조되었습니다,해시 값은 일치하지 않습니다!";
}

샘플 코드

완전한 샘플 코드는 다음과 같습니다.

 <?php

// 파일을 엽니 다
$file = fopen('path/to/your/file', 'rb');
if (!$file) {
    die('无法파일을 엽니 다');
}

// 해시 컨텍스트를 초기화합니다
$hashContext = hash_init('sha256');

// 逐步읽다文件并更新哈希值
while (!feof($file)) {
    $data = fread($file, 8192);
    hash_update_stream($hashContext, $data);
}

// 파일의 해시 값을 얻으십시오
$fileHash = hash_final($hashContext);

// 예상 해시 가치
$expectedHash = '예상 해시 가치'; // 예를 들어,'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'

// 해시 값을 비교하십시오
if (hash_equals($fileHash, $expectedHash)) {
    echo "파일 완료,해시 가치 매칭!";
} else {
    echo "파일이 손상되거나 변조되었습니다,해시 값은 일치하지 않습니다!";
}

// 파일을 닫습니다
fclose($file);

?>