MD5 해시를 Base64로 얻는 방법
- 알고리즘에 MD5가 미리 선택되어 있습니다.
- 파일이라면 입력을 파일로 바꾸고 파일을 놓으세요. 여러 파일을 한 번에 놓아도 되며, 파일마다 결과가 따로 나옵니다. 200 MB가 넘는 파일은 진행률과 함께 8 MB 단위로 읽습니다.
- 텍스트라면 입력을 텍스트로 두고 입력하거나 붙여넣으세요. 입력 형식을 쓰면 hex나 Base64 데이터를 UTF-8 텍스트가 아닌 원시 바이트로 해시할 수 있습니다.
- 헤더와 API에는 Base64 값을,
md5sum출력과 비교하려면 Hex 값을 복사하세요. 둘 다 같은 16바이트를 나타냅니다.
도구는 MD5가 보안 용도에 맞지 않는다는 짧은 경고를 표시합니다. 맞는 말이며 체크섬에는 영향이 없습니다.
Hex와 Base64: 같은 16바이트
| 입력 | MD5 (hex) | MD5 (Base64) |
|---|---|---|
| 빈 값 | d41d8cd98f00b204e9800998ecf8427e | 1B2M2Y8AsgTpgAmY7PhCfg== |
hello | 5d41402abc4b2a76b9719d911017c592 | XUFAKrxLKna5cZ2REBfFkg== |
The quick brown fox jumps over the lazy dog | 9e107d9d372bb6826bd81d3542a419d6 | nhB9nTcrtoJr2B01QqQZ1g== |
Content-MD5에서 가장 흔한 실수는 hex 텍스트를 Base64로 인코딩하는 것입니다. 여우 문장이라면 OWUxMDdkOWQzNzJiYjY4MjZiZDgxZDM1NDJhNDE5ZDY=가 나오는데, 어떤 서버도 받지 않는 44문자입니다. 길이만 보면 바로 알 수 있습니다. 24문자면 맞고, 44문자면 hex를 잘못 인코딩한 것입니다.
Base64 MD5가 필요한 곳
Content-MD5요청 헤더(RFC 1864). Amazon S3는 업로드 시 이를 확인하고, Azure Blob Storage도 본문이 일치하지 않으면 오류를 돌려줍니다.- Google Cloud Storage는 객체의
md5Hash를 Base64로 알려 주며,gsutil hash는 hex를 위한-h를 주지 않으면 Base64를 출력합니다. - Azure Blob 속성도
Content-MD5를 Base64로 저장합니다. - SHA 기반 체크섬이 나오기 전에 이 헤더를 채택한 오래된 API와 이메일 시스템.
hex를 그대로 쓰는 곳도 있습니다. md5sum과 대부분의 다운로드 페이지, 그리고 단일 파트 S3 업로드의 ETag(따옴표로 감싼 hex MD5)입니다. 멀티파트 S3 ETag는 -와 파트 수로 끝나며 파일 전체의 MD5가 전혀 아니므로, 이 도구의 결과와 절대 일치하지 않습니다.
명령줄과 코드에서 MD5를 Base64로
openssl md5 -binary file.bin | base64
md5sum file.bin | cut -d' ' -f1 | xxd -r -p | base64
import base64, hashlib
with open("file.bin", "rb") as f:
digest = hashlib.file_digest(f, "md5").digest()
print(base64.b64encode(digest).decode())
hashlib.file_digest는 Python 3.11 이상이 필요합니다. 이전 버전에서는 파일을 나누어 읽으며 update()를 호출하세요. Node.js에서는 crypto.createHash("md5").update(buffer).digest("base64")가 Base64 형식을 바로 돌려줍니다. 최신 API가 SHA-256 체크섬을 제공한다면 그쪽을 쓰세요. SHA-256을 Base64로가 같은 방식으로 그 값을 만듭니다. 더 많은 코드는 OpenSSL과 Python 페이지에 있습니다.
자주 묻는 질문
Content-MD5 헤더는 무엇인가요?
RFC 1864에 정의된 HTTP 헤더로, 본문의 16바이트 MD5 다이제스트를 Base64로 담습니다. Amazon S3와 Azure Blob Storage 같은 스토리지 서비스는 이것으로 전송 중 손상된 업로드를 거부합니다.
Base64 MD5가 44문자인 이유는 무엇인가요?
16바이트 원시 값 대신 32자리 hex 문자열을 인코딩했기 때문입니다. 올바른 Base64 MD5는 항상 ==로 끝나는 24문자입니다. 인코딩 전에 바이너리 출력으로 해시하세요(OpenSSL은 -binary, Python은 .digest()).
MD5 hex 체크섬을 Base64로 바꾸려면 어떻게 하나요?
hex를 바이트로 디코딩한 뒤 Base64로 인코딩하세요. 9e107d9d372bb6826bd81d3542a419d6은 nhB9nTcrtoJr2B01QqQZ1g==가 됩니다. Hex를 Base64로 변환기에 붙여넣으면 한 번에 됩니다.
MD5는 아직 안전하게 쓸 수 있나요?
우발적인 손상 감지에는 됩니다. 공격자가 영향을 줄 수 있는 곳에는 안 됩니다. MD5 충돌은 노트북으로도 만들 수 있어서 서로 다른 두 파일이 같은 해시를 가질 수 있습니다. 변조에 대한 무결성에는 SHA-256을, 비밀번호에는 Argon2나 bcrypt 같은 비밀번호 해시를 쓰세요.