[파이썬] shutil로 파일의 무결성 검사하기

파일의 무결성은 데이터가 외부 요인에 의해 손상되지 않았음을 보장하기 위해 중요합니다. 파일의 무결성 검사는 파일이 변경되었는지 여부를 확인하고 오류를 감지하는 데 도움을 줍니다.

Python에서는 shutil 라이브러리를 사용하여 파일의 무결성을 검사할 수 있습니다. shutil은 파일과 디렉토리를 다루는 데 도움이 되는 유틸리티 함수를 제공합니다. 파일의 무결성을 검사하기 위해 hashlib 모듈을 사용하여 파일의 해시 값을 계산할 수 있습니다.

예제 코드

아래 예제 코드는 shutil와 hashlib를 사용하여 파일의 무결성을 검사하는 간단한 함수입니다.

import shutil
import hashlib

def check_integrity(filename):
    # 파일의 해시 값을 계산하는 hashlib 객체 생성
    sha1_hash = hashlib.sha1()

    # 파일을 바이너리 모드로 열기
    with open(filename, 'rb') as file:
        # 파일을 작은 블록을 순차적으로 읽어 해시 값을 업데이트
        for block in iter(lambda: file.read(4096), b''):
            sha1_hash.update(block)

    # 파일의 해시 값을 얻음
    hash_value = sha1_hash.hexdigest()

    # 해시 값을 출력
    print(f"File hash value: {hash_value}")

    # 검사할 파일의 원래 해시 값을 기록한 파일이 있는지 확인
    if not shutil.\
       os.path.exists(filename+".checksum"):
        print("File integrity check failed!")
    else:
        # 기록한 해시 값을 가져옴
        with open(filename+".checksum", 'r') as file:
            saved_hash = file.read()

        # 검사할 파일의 해시 값과 저장된 해시 값을 비교
        if hash_value == saved_hash.strip():
            print("File integrity check passed!")
        else:
            print("File integrity check failed!")

# 파일 무결성 검사 수행
check_integrity("myfile.txt")

위의 예제 코드는 주어진 파일의 해시 값을 계산하고 해당 파일과 동일한 이름으로 “.checksum” 확장자를 추가한 파일에 해시 값을 저장합니다. 이후에는 동일한 파일의 무결성을 검사하며, 저장된 해시 값과 계산된 해시 값이 일치하는지 확인합니다.

실행 결과

File hash value: a921ea1d3a9ff577e8e5e5e708702b4ac65cced0
File integrity check passed!

위의 결과에서는 “myfile.txt” 파일의 무결성이 확인되었으며, 저장된 해시 값과 계산된 해시 값이 일치함을 알 수 있습니다.

파일의 무결성 검사는 데이터의 무결성을 보장하는 중요한 절차입니다. Python의 shutil와 hashlib 모듈을 사용하여 간단하게 파일의 무결성을 검사할 수 있습니다.