현재 위치: > 최신 기사 목록> hash_update_stream 함수를 사용하여 업로드 된 파일을 안전하게 해시하는 방법은 무엇입니까?

hash_update_stream 함수를 사용하여 업로드 된 파일을 안전하게 해시하는 방법은 무엇입니까?

M66 2025-06-23

파일을 업로드 할 때 파일의 무결성과 보안을 보장하는 것이 매우 중요한 단계입니다. 업로드 중에 파일이 변조되었는지 확인하기 위해 해시 확인을 사용할 수 있습니다. PHP는 큰 파일을 효율적으로 해시 할 수있는 hash_update_stream 함수를 제공합니다.

이 기사는 Hash_update_stream 함수를 사용하여 파일의 해시 확인을 수행하고 파일의 보안을 보장하는 방법을 자세히 소개합니다.

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

Hash_update_stream 은 PHP의 내장 해시 기능입니다. 스트림 (예 : 파일 스트림)을 실시간으로 처리하고 해시 할 수 있습니다. 해시 확인을 위해 전체 파일을 한 번에로드하는 것과 비교하여 Hash_update_stream 함수는 메모리 자원을 저장할 수 있으며 큰 파일의 확인에 적합합니다.

함수 서명은 다음과 같습니다.

 bool hash_update_stream ( resource $context , resource $file )
  • $ 컨텍스트 : Hash_Init 함수에 의해 생성 된 해시 컨텍스트 리소스.

  • $ 파일 : 파일 자원, 일반적으로 Fopen 함수가 열린 파일 스트림.

2. hash_update_stream을 사용하여 업로드 된 파일에서 해시 확인을하십시오

2.1 파일 업로드의 기본 처리

파일을 업로드 할 때는 일반적으로 $ _files Hyperglobal 배열을 사용하여 파일 정보를 얻습니다. 해시 확인을 수행하기 전에 파일이 유효한지 확인하고 처리해야합니다.

다음은 파일 업로드의 기본 예입니다.

 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
    $file = $_FILES['file'];
    
    // 파일에 성공적으로 업로드되었는지 확인하십시오
    if ($file['error'] === UPLOAD_ERR_OK) {
        $filePath = $file['tmp_name']; // 임시 파일 경로
        $fileName = $file['name'];
        
        // 해시 확인을 수행하십시오
        if (checkFileHash($filePath)) {
            echo "파일 해시 확인을 성공적으로 확인하십시오,파일 보안。";
        } else {
            echo "파일 해시 확인에 실패했습니다,파일이 변조되었을 수 있습니다。";
        }
    } else {
        echo "파일 업로드가 실패했습니다,오류 코드:" . $file['error'];
    }
}

2.2 파일 해시 확인에는 hash_update_stream을 사용하십시오

다음으로, 우리는 hash_update_stream 함수가 업로드 된 파일을 해시하기 위해 Checkfilehash 함수를 작성합니다.

 function checkFileHash($filePath) {
    // aSHA256해시 컨텍스트
    $hashContext = hash_init('sha256');

    // 파일 스트림을 엽니 다
    $fileStream = fopen($filePath, 'rb');
    if ($fileStream === false) {
        return false; // 无法파일 스트림을 엽니 다
    }

    // 사용 hash_update_stream 파일 스트림을 해시합니다
    if (hash_update_stream($hashContext, $fileStream)) {
        // 최종 해시 값을 얻으십시오
        $fileHash = hash_final($hashContext);
        fclose($fileStream);

        // 해시 값을 예상 값과 비교할 수 있습니다.,파일이 변조되지 않았는지 확인하십시오
        // 여기에 예제 값이 있습니다 `예상 해시 가치` 예로,실제 올바른 해시 값으로 교체해야합니다.
        $expectedHash = '예상 해시 가치';
        return $fileHash === $expectedHash;
    }

    fclose($fileStream);
    return false; // 해시 계산이 실패했습니다
}

2.3 왜 hash_update_stream을 사용합니까?

hash_update_stream 함수의 주요 장점은 전체 파일을 메모리에로드하지 않고 스트리밍 데이터를 처리 할 수 ​​있다는 것입니다. 큰 파일의 경우 Hash_update_stream을 사용하는 것이 전체 파일을 한 번에로드하고 특히 메모리 자원이 제한된 환경에서 해시를 계산하는 것보다 효율적입니다.

3. 요약

업로드 된 파일에서 Hash_update_stream 함수를 사용하여 업로드 된 파일에서 해시 확인을 사용하면 업로드 중에 파일이 변조되는 것을 효과적으로 방지 할뿐만 아니라 큰 파일을 처리하고 너무 많은 메모리를 소비하지 않도록 할 수 있습니다. 파일의 해시 값을 예상 값과 결합하여 파일의 무결성을 확인하여 시스템의 보안을 향상시킬 수 있습니다.

실제 애플리케이션에서는 파일 확인을 수행 할 필요성에 따라 다른 해싱 알고리즘 ( SHA256 , MD5 등)을 선택할 수 있습니다.