현재 위치: > 최신 기사 목록> 해시 무결성 구현 파일의 연속 전송 검증

해시 무결성 구현 파일의 연속 전송 검증

M66 2025-05-27

파일 전송 또는 다운로드 중에 특히 큰 파일이 종종 중단이 발생합니다. 파일 무결성을 보장하기 위해 파일 전송 중에 파일은 일반적으로 해시되고 확인됩니다. PHP는 강력한 해싱 기능을 제공하며 Hash_update_stream 함수는 그 중 하나입니다. 큰 파일의 해시 계산을 처리하는 데 사용될 수 있으며 특히 중단 점 연속 파일을 확인하는 데 적합합니다.

이 기사는 Hash_update_stream을 사용하여 파일의 해시 무결성 검증을 구현하여 파일이 중단 후 계속 다운로드 할 때 무결성 확인이 될 수 있는지 확인하는 방법을 소개합니다.

1. Hash_update_stream 함수는 무엇입니까?

hash_update_stream 함수는 스트림 데이터를 읽는 과정에서 해시 값을 계산하는 PHP의 함수입니다. Hash_update 와 달리 후자는 전체 데이터를 한 번에 메모리에로드 해야하는 반면 Hash_update_stream은 해시 계산을 위해 파일 스트림을 점차적으로 읽을 수 있으므로 청크로 처리 해야하는 큰 파일 또는 파일에 적합합니다.

 bool hash_update_stream ( resource $context , resource $stream [, int $length ] )
  • $ Context : Hash_init 에 의해 일반적으로 생성 된 해시 리소스.

  • $ stream : 일반적으로 fopen () 을 통해 얻은 파일 스트림 자원.

  • $ 길이 : 읽을 바이트 수, 기본값은 8192 바이트입니다.

2. 해시 파일 연속 전송 검증

파일 전송 중에 전송이 중간에 연결이 끊어지면 중단 점 전송 메커니즘은 연결이 끊긴 위치에서 계속 다운로드됩니다. 중단 점이 지속적으로 전송 된 후 파일 무결성을 확인하기 위해 파일의 해시 값은 일반적으로 서버 측에서 계산되며 클라이언트가 전송 한 해시 값과 비교됩니다.

파일 bigfile.zip 파일을 계속 다운로드 할 수있는 중단 점이 있다고 가정 해 봅시다. 전송 프로세스 중에 파일이 변조되었거나 일부 콘텐츠가 손실되었는지 확인해야합니다. 다음은 해시 무결성 검증을 구현하는 단계입니다.

3. 샘플 코드 : hash_update_stream을 사용하여 파일 무결성을 확인하십시오

파일 bigfile.zip 파일을 다운로드하고 파일이 중단 점으로 전송 될 때 파일의 무결성을 확인해야한다고 가정하십시오. 다음 코드는 중단 점 연속 동안 Hash_update_stream 함수를 사용하여 파일의 해시를 계산하는 방법을 보여줍니다.

 <?php
// 초기 해시 컨텍스트(사용 SHA256 연산)
$hashContext = hash_init('sha256');

// 파일 스트림을 엽니 다
$fileStream = fopen('https://m66.net/bigfile.zip', 'rb');
if (!$fileStream) {
    die("파일을 열 수 없습니다!\n");
}

// 파일의 해시 값을 계산하십시오
while (!feof($fileStream)) {
    // 파일을 읽고 해시를 업데이트하십시오
    $data = fread($fileStream, 8192);
    hash_update_stream($hashContext, $data);
}

// 최종 해시 값을 얻으십시오
$fileHash = hash_final($hashContext);

// 출력 파일의 해시 값
echo "더럽히는SHA-256해시 가치:$fileHash\n";

// 파일 스트림을 닫습니다
fclose($fileStream);

// 假设已经在服务器端生成并存储了더럽히는正确해시 가치
$serverStoredHash = 'abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890';

// 比较本地计算的해시 가치与服务器存储的해시 가치
if ($fileHash === $serverStoredHash) {
    echo "파일 무결성 검증이 성공적이었습니다!\n";
} else {
    echo "파일 확인이 실패했습니다,파일이 손상되거나 변조되었을 수 있습니다!\n";
}
?>

4. 코드 설명

  • HASH_INIT : 해시 컨텍스트를 초기화하고 SHA256 알고리즘을 선택하여 해시 값을 생성하십시오.

  • FOPEN : 다운로드 할 파일 스트림을 엽니 다. 여기에서 https://m66.net/bigfile.zip을 샘플 파일 주소로 사용합니다.

  • hash_update_stream : 파일의 각 데이터 조각을 점차적으로 읽고 해시 값을 업데이트합니다. 시간당 읽기 데이터 블록 크기는 8192 바이트입니다.

  • Hash_Final : 파일의 최종 해시 값을 가져옵니다.

  • 파일 확인 : 파일의 무결성을 확인하기 위해 서버에 저장된 올바른 해시 값과 계산 된 해시 값의 비교.

5. 브레이크 포인트 연속 전송시 해시 검증

중단 점이 계속되는 시나리오에서는 일반적으로 "다운로드 된 부품"해시 값을 저장 한 다음 계속 다운로드 할 때 마지막 중단 점에서 시작하는 파일 부품의 해시를 계산합니다. 이를 위해 코드의 Fread를 FSEEK 와 함께 사용하여 파일의 읽기 위치를 제어하여 계산이 지정된 위치에서 시작되도록 할 수 있습니다.

 // 파일 흐름 포인터를 지정된 위치로 설정하십시오(예를 들어, 중단 점이 계속 된 부분)
fseek($fileStream, $resumePosition);

계속 다운로드 할 때 이력서 배치 위치에서 데이터 블록을 계속 읽고 해시를 업데이트하여 전체 파일의 무결성을 확인합니다.

6. 요약

Hash_update_stream을 사용하여 PHP는 특히 중단 점 연속 전송으로 파일을 전송할 때 큰 파일의 해시 값을 계산하는 효율적인 방법을 제공합니다. 이러한 방식으로 전송 프로세스 중 파일의 무결성과 정확성을 보장하고 파일이 중간에 분리 된 후 데이터 손실 또는 손상을 피할 수 있습니다.

해시 확인을 위해 Hash_update_stream 함수와 결합 된 중단 점 연속 전송을 지원 해야하는 파일 다운로드 또는 업로드 시스템을 개발하는 경우 신뢰할 수있는 데이터 무결성 보증을 제공합니다.