웹 개발에서 파일 전송 및 스토리지의 보안은 항상 무시할 수없는 문제였습니다. 전송 중에 파일의 무결성을 보장하고 파일이 변조되지 않도록하기 위해 파일 서명 검증은 일반적이고 효과적인 관행입니다. hash_update_stream () 함수는 파일 서명 확인을 처리하기위한 PHP의 중요한 도구 중 하나입니다. 이 기사는 Hash_update_stream () 함수를 사용하여 파일 서명 확인을 구현하고 파일 무결성 및 보안을 보장하는 방법을 소개합니다.
파일 서명 검증은 해시 알고리즘을 사용하여 파일 내용에 디지털 서명을 생성 한 다음 해당 서명을 통해 파일의 무결성을 확인하는 메소드입니다. 일반적인 해싱 알고리즘에는 MD5, SHA-1, SHA-256 등이 포함됩니다. 고유 한 파일 지문을 생성하여 전송 중 파일의 무결성을 확인하는 데 도움이됩니다.
파일이 네트워크에서 전송되면 파일 변조, 데이터 손실 등과 같은 다양한 위협에 직면 할 수 있습니다. 이러한 문제를 방지하기 위해 파일 서명 검증을 통해 파일이 변조되지 않았고 콘텐츠가 완료되었는지 확인하는 데 도움이 될 수 있습니다.
PHP의 hash_update_stream () 함수는 해시 값을 업데이트하는 데 사용됩니다.이 값은 큰 파일을 처리하는 데 매우 효과적입니다. 이는 전체 파일 컨텐츠를 메모리에 한 번에 메모리에로드 할 필요없이 해시 값을 단계별로 업데이트 할 수 있기 때문입니다. 이 함수는 일반적으로 hash_init () 및 hash_final () 함수와 함께 사용하여 파일 서명 생성 및 확인 프로세스를 완료합니다.
hash_update_stream () 의 기본 구문은 다음과 같습니다.
bool hash_update_stream ( resource $context , resource $handle [, int $length = 1024 ] )
$ 컨텍스트 : 이것은 hash_init () 함수에 의해 생성 된 해시 컨텍스트입니다.
$ 핸들 : 파일의 파일 핸들, fopen () 함수를 통해 얻을 수 있습니다.
$ 길이 : 해시가 업데이트 될 때마다 읽는 바이트 수는 기본적으로 1024 바이트입니다.
먼저 해시 알고리즘을 선택하고 해시 컨텍스트를 초기화해야합니다. 이 경우 SHA-256 알고리즘을 사용합니다.
$algorithm = 'sha256';
$context = hash_init($algorithm);
다음으로 fopen () 함수를 통해 파일을 열고 Hash_update_stream () 함수를 사용하여 파일 내용을 점차적으로 읽고 해시 값을 업데이트합니다. 이 프로세스는 너무 많은 메모리를 사용하지 않고 큰 파일을 처리 할 수 있습니다.
$file = fopen('file.txt', 'rb');
if ($file === false) {
die('파일을 열 수 없습니다');
}
while (!feof($file)) {
hash_update_stream($context, $file);
}
fclose($file);
파일 내용이 모두 읽기 및 해시 컨텍스트로 업데이트되면 Hash_Final () 함수를 통해 최종 해시 값을 얻을 수 있습니다.
$fileHash = hash_final($context);
echo "파일의 해시 값은입니다: " . $fileHash;
파일의 무결성을 확인하려면 파일의 해시 값을 이전에 저장된 올바른 해시 값과 비교해야합니다. 두 경기가 있으면 파일이 변조되지 않았습니다.
$expectedHash = '사전 저장된 해시 값';
if ($fileHash === $expectedHash) {
echo "파일 완료,변조하지 않습니다";
} else {
echo "파일이 변조되었습니다";
}
<?php
// 해싱 알고리즘을 선택하십시오
$algorithm = 'sha256';
// 해시 컨텍스트를 초기화합니다
$context = hash_init($algorithm);
// 파일을 엽니 다
$file = fopen('file.txt', 'rb');
if ($file === false) {
die('파일을 열 수 없습니다');
}
// 해시 값을 점차 업데이트하십시오
while (!feof($file)) {
hash_update_stream($context, $file);
}
fclose($file);
// 파일의 해시 값을 얻으십시오
$fileHash = hash_final($context);
echo "파일의 해시 값은입니다: " . $fileHash . "\n";
// 验证파일 완료性
$expectedHash = '사전 저장된 해시 값';
if ($fileHash === $expectedHash) {
echo "파일 완료,변조하지 않습니다";
} else {
echo "파일이 변조되었습니다";
}
?>
높은 메모리 효율 : Hash_update_stream () 함수를 사용하면 파일을 점진적으로 읽고 해시 값을 계산할 수 있습니다.이 값은 큰 파일을 처리하는 데 적합하며 한 번에 전체 파일을로드하는 메모리 소비를 피합니다.
여러 해싱 알고리즘을 지원합니다 . PHP는 여러 해싱 알고리즘 (SHA-256, SHA-512 등)을 지원하며 필요에 따라 적절한 알고리즘을 선택할 수 있습니다.
사용하기 쉬운 : 파일 서명 확인에 Hash_update_stream ()을 사용하는 것은 매우 간단하며 완전성 검증은 몇 단계만으로 필요합니다.
실제 응용 프로그램에서 파일 서명 확인은 종종 파일 다운로드 및 업로드 작업과 함께 사용됩니다. 파일 전송에 M66.net 과 같은 웹 사이트를 사용하는 경우 각 다운로드 파일에 서명하고 확인하는 것이 중요한 보안 조치입니다. 예를 들어 M66.net 에서 다운로드 한 파일이 변조되었는지 확인할 수 있습니다.