Python에서 파일의 해시(hash) 값을 구하려면 표준 라이브러리인 hashlib을 사용하면 됩니다. 파일 크기가 수백 MB 이상으로 클 수도 있기 때문에, 파일 전체를 한 번에 메모리에 올리기보다는 버퍼(buffer)를 활용해 일정 크기의 청크(chunk) 단위로 나누어 읽고 처리하는 것이 좋습니다. 버퍼 크기는 상황에 맞게 자유롭게 조절할 수 있습니다.
예제
아래 예제는 32KB 크기의 청크로 파일을 읽으면서 MD5와 SHA1 해시를 동시에 계산합니다.
import sys
import hashlib
BUF_SIZE = 32768 # 32KB씩 청크 단위로 파일 읽기
md5 = hashlib.md5()
sha1 = hashlib.sha1()
with open('program.cpp', 'rb') as f:
while True:
data = f.read(BUF_SIZE)
if not data:
break
md5.update(data)
sha1.update(data)
print("MD5: {0}".format(md5.hexdigest()))
print("SHA1: {0}".format(sha1.hexdigest()))
실행 결과
위 코드를 실행하면 다음과 같은 출력을 얻을 수 있습니다.
MD5: 7481a578b20afc6979148a6a5f5b408d SHA1: f7187ed8b258baffcbff2907dbe284f8f3f8d8c6
참고 사항
파일을 열 때는 반드시 바이너리 모드('rb')로 열어야 합니다. 텍스트 모드로 열면 줄바꿈 문자 변환 등의 영향으로 운영체제마다 서로 다른 해시 값이 나올 수 있습니다. 또한 MD5와 SHA1은 충돌 공격에 취약하여 보안 목적으로는 권장되지 않으므로, 무결성 검증이나 보안이 중요한 작업에는 SHA-256처럼 더 강력한 알고리즘을 사용하는 것이 좋습니다.