본문 바로가기
Gemini 작업

파이썬 파일 SHA256해시

by shulk 2024. 7. 23.

클라에서 요청할때마다 영상이 동일하면 캐싱하고 아니면 업로드하는데

일단 이전 요청 동영상이랑 이후 요청 동영상이랑 동일한지 판별하려면 해싱후 하는방법이 있다.

근데 영상의 제목으로만 하면 당연히 같은 영상인데 제목만 같을 수 도 있으니 파일 자체 읽어 해싱을 한다.

 def generate_file_hash(file_path):
        """파일의 SHA256 해시를 생성합니다."""
        sha256_hash = hashlib.sha256()
        with open(file_path, "rb") as f:
            for byte_block in iter(lambda: f.read(4096), b""):
                sha256_hash.update(byte_block)

        return sha256_hash.hexdigest()

 

1. 파일 열기 (with open(file_path, "rb") as f)

  • open 함수는 파일을 열고 파일 객체를 반환합니다.
  • file_path는 파일의 경로입니다.
  • "rb" 모드는 파일을 바이너리 읽기 모드로 열도록 지정합니다. 이는 텍스트가 아닌 바이너리 파일을 처리할 때 필요합니다.
  • with 문을 사용하면 파일을 자동으로 닫아줍니다. 이는 파일 사용이 끝난 후 파일을 닫는 것을 보장합니다.

2. 파일 내용을 읽어 SHA-256 해시 업데이트 (for byte_block in iter(lambda: f.read(4096), b""))

  • iter(lambda: f.read(4096), b"")는 파일을 4096 바이트씩 읽어들이는 반복자를 생성합니다.
    • f.read(4096)는 파일에서 최대 4096 바이트를 읽습니다. 읽을 데이터가 더 이상 없으면 빈 문자열 또는 빈 바이트열을 반환합니다.
    • iter 함수는 첫 번째 인자로 주어진 함수(lambda: f.read(4096))를 반복 호출하고, 두 번째 인자인 b""가 반환되면 반복을 종료합니다.
    • lambda: f.read(4096)는 4096 바이트씩 파일을 읽는 익명 함수입니다.
  • for byte_block in iter(lambda: f.read(4096), b"")는 파일을 4096 바이트씩 읽어 byte_block 변수에 할당하고 반복합니다.
  • sha256_hash.update(byte_block)는 읽어들인 바이트 블록을 해시 객체에 추가하여 해시 값을 업데이트합니다.

3. 해시 값 반환 (return sha256_hash.hexdigest())

  • sha256_hash.hexdigest()는 최종 해시 값을 16진수 문자열로 반환합니다.