매일 개발에서는 종종 파일을 확인하여 무결성이 손상되었는지 확인해야합니다. 일반적인 방법은 파일의 MD5 값을 비교하는 것입니다. PHP는 md5_file () 함수를 제공하는 반면, 유사한 함수는 Hashlib 모듈을 통해 Python에서 구현할 수 있습니다. 그렇다면이 두 플랫폼에 의해 계산 된 MD5 값이 일관되게됩니까? 비교 및 확인할 수 있습니까? 이 기사는 원칙, 사용 예제 및 실제 비교의 세 가지 측면에서 분석됩니다.
PHP의 MD5_File ()은 파일 내용에서 MD5 해싱을 수행하고 32 비트 16 진수 문자열을 반환하는 데 사용되는 내장 기능입니다.
사용 예 :
<?php
$file = 'example.txt';
$md5 = md5_file($file);
echo "MD5가치는입니다:" . $md5;
?>
이 예에서 MD5_FILE ()는 전체 파일 내용을 읽은 다음 MD5 값을 계산합니다. 기본값은 소문자 32 비트 16 진수 문자열을 반환합니다.
Python은 또한 파일의 MD5 값을 쉽게 계산할 수 있으며,이 파일은 Hashlib 모듈을 통해 구현할 수 있습니다.
import hashlib
with open("example.txt", "rb") as f:
md5 = hashlib.md5()
while chunk := f.read(8192):
md5.update(chunk)
print("MD5가치는입니다:", md5.hexdigest())
PHP와 비교할 때 Python은 메모리 소비를 줄이기 위해 큰 파일의 블록 별 블록 읽기를 강조합니다.
이론적으로 Md5_file () 및 Python 's hashlib.md5 ()는 동일한 MD5 해시 알고리즘 (RFC 1321)을 사용하므로 동일한 파일의 내용을 계산할 때 결과가 정확히 동일해야합니다.
동일한 파일을 준비하고 각각 PHP 및 Python에서 MD5 값을 계산할 수 있습니다.
파일 내용은 다음과 같습니다 (example.txt) :
Hello, this is a test file for MD5 hashing.
PHP 출력 :
<?php
echo md5_file('example.txt');
// 산출:1a79a4d60de6718e8e5b326e338ae533
?>
파이썬 출력 :
import hashlib
with open("example.txt", "rb") as f:
print(hashlib.md5(f.read()).hexdigest())
# 산출:1a79a4d60de6718e8e5b326e338ae533
출력 MD5 값이 완전히 일관성이 있음을 알 수 있습니다. 즉, 알고리즘과 구현 수준에서 둘 사이에 필수적인 차이가 없음을 의미합니다.
함수 자체의 계산 방법은 일관되지만 실제 사용에는 여전히 다른 MD5 값이있을 수 있습니다. 일반적인 이유는 다음과 같습니다.
라인 브레이크 문자 차이 : Windows에서는 CRLF ( \ r \ n ), Linux는 일반적으로 lf ( \ n )입니다. 파일이 두 시스템간에 라인 브레이크 문자를 균일하지 않으면 MD5에 영향을 미칩니다.
코딩 문제 : PHP 및 Python은 파일을 다르게 읽습니다. 이진 모드를 사용하여 통일 된 방식으로 파일을 읽는 것이 좋습니다.
완전히 작성되지 않은 파일 : 계산 중에 파일이 닫히지 않았거나 쓰여진 경우 불완전한 판독 값을 초래하고 다른 결과로 이어질 수 있습니다.
파일 경로 또는 권한 문제 : 파일 경로에 잘못된 철자가 잘못되었거나 권한이 충분하지 않은 경우 읽기, False를 반환하거나 오류를보고하지 못할 수 있습니다.
때로는 원격 파일의 MD5를 계산해야합니다. PHP에서는 다음과 같이 구현할 수 있습니다.
<?php
$url = 'https://m66.net/sample.jpg';
$temp_file = tempnam(sys_get_temp_dir(), 'md5');
file_put_contents($temp_file, file_get_contents($url));
echo md5_file($temp_file);
unlink($temp_file);
?>
Python에서는 요청을 사용하여 파일을 다운로드 한 다음 다음을 계산할 수 있습니다.
import hashlib, requests
url = "https://m66.net/sample.jpg"
r = requests.get(url)
md5 = hashlib.md5(r.content).hexdigest()
print(md5)
다운로드 된 파일 컨텐츠가 일관된 한 MD5 값도 일관성을 유지합니다.
PHP의 MD5_FILE () 및 PYTHON HASHLIB 계산 파일의 MD5 값은 알고리즘 적으로 일관성이 있습니다. 읽기 파일의 내용이 일관되고 파일 인코딩 메소드가 일관되게 보장하는 한 결과에는 차이가 없습니다. 교차 해시 결과를 비교할 때 개발자는 파일 읽기 방법, 라인 브레이크 및 인코딩 형식과 같은 세부 사항에주의를 기울여야합니다.
이 두 언어의 운영 기술을 파일 MD5 검증으로 마스터하면 다국어 프로젝트에서 데이터 일관성 및 보안을 보장하는 데 도움이됩니다.