Python으로 Google Cloud Storage의md5 체크섬 계산하기
결론
배경.
과제: GCS에 업로드된 파일 사이에 중복된 파일이 잘못 전송되었는지 조사
구속: gsutil 명령을 사용할 수 없습니다 (사용할 수 있다면 gsutil hash로 순간적으로 죽일 수 있습니다)
md5 검사와 검증 파일의 일치성
흔히 볼 수 있는 방법으로md5 검사를 받고 비교하는 방법이 있기 때문에 먼저 시도해 보겠습니다.
GCS를 표준 규격대상 단위로md5 검사와으로 하기 때문에 이것을 사용하면 간단해 보입니다.
이번에는 gsutil을 규정에 따라 사용할 수 없기 때문에python을 사용합니다.
from google.cloud import storage
client = storage.Client()
bucket = client.get_bucket("my-test-bucket000")
blob = bucket.blob("test.txt")
blob.reload()
blob.md5_hash
결과는'2Oj8otwPiW/Xy0ywAxuiSQ=='이었다.나는 많은 사람들이 이 문자열에 대해 매우 화가 났다고 생각한다.다음에python으로 같은 파일의md5 검사와
import hashlib
with open("test.txt", "rb") as f:
print(hashlib.md5(f.read()).hexdigest())
결과는'd8e8fca2dc0f896fd7cb4cb003ba249'로 완전히 일치하지 않습니다.(읽기 어려워서hexdigest를 사용하지만 다음은digest를 사용한다)
base64 + md5
방금 GCS 측에서'2Oj8otwPiW/Xy0ywAxuiSQ=='을 확인했지만, HTTP의 흐름이 Base64 인코딩된 문자열과 비슷하다고 생각해서 콘텐츠-MD5 머리에 뭐가 있는지 조사해 봤다.
처음에도 RFC1864라고 썼는데 기록된 바와 같이 128bit의 MD5 요약을 얻은 후에 베이스 64 인코딩을 곱한 것 같다.
그러니까 다시 계산해 봐.
import hashlib
import base64
with open("test.txt", "rb") as f:
print(print(base64.b64encode(hashlib.md5(f.read()).digest())))
GRS의 결과 "2Oj8otwPiW/Xy0ywAxuiSQ==="와 일치
Reference
이 문제에 관하여(Python으로 Google Cloud Storage의md5 체크섬 계산하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/marufeuille/articles/dc685a09bf3d5d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)