Gemini 작업

파이썬 파일 SHA256해시

shulk 2024. 7. 23. 18:07

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

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

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

 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진수 문자열로 반환합니다.