사용 방법
- 텍스트를 입력하거나 붙여넣습니다. 원시 바이트를 해시하려면 ‘입력 형식’을 ‘16진수’로 바꾸고, 파일의 바이트를 그대로 해시하려면 ‘파일 열기’를 클릭합니다.
- 원래 해시가 다른 문자 집합의 텍스트로 만들어진 경우가 아니라면 ‘문자 인코딩’은 UTF-8로 둡니다.
- ‘출력 형식’에서 ‘16진수(소문자)’, ‘16진수(대문자)’, ‘Base64’ 중 하나를 선택합니다.
- 다운로드한 파일을 확인하려면 공개된 MD5 값을 ‘비교 대상’ 필드에 붙여넣고 ‘일치’가 표시되는지 확인합니다.
MD5란 무엇입니까?
MD5(Message-Digest Algorithm 5)는 Ronald Rivest가 설계했으며 1992년 RFC 1321로 공개되었습니다. 입력을 512비트 블록 단위로 읽어 128비트 다이제스트를 만들며, 보통 16진수 32자나 Base64 24자로 표기합니다. 같은 입력은 항상 같은 다이제스트를 만들고, 입력의 비트 하나만 바뀌어도 출력 비트의 약 절반이 바뀝니다.
해시는 단방향입니다. 키가 없으며 MD5 해시를 원래 입력으로 "복호화"할 방법도 없습니다. MD5를 되돌린다고 주장하는 사이트는 단어와 유출된 비밀번호를 해시해 둔 거대한 표에서 해시를 찾아볼 뿐입니다. 그래서 솔트 없이 해시한 짧은 비밀번호의 MD5는 몇 초 만에 찾아지는 경우가 많습니다.
MD5는 아직 안전합니까?
공격자를 상대로는 안전하지 않습니다. 2004년 왕샤오윈(Xiaoyun Wang)과 동료들은 실제로 만들 수 있는 충돌, 즉 MD5가 같은 서로 다른 두 입력을 발표했습니다. 이어서 선택 접두사 충돌(chosen-prefix collision)이 등장했습니다. 2008년 연구자들은 이를 이용해 위조 CA 인증서를 만들었고, 2012년 Flame 악성 코드는 이를 이용해 인증서를 위조하여 자신의 코드가 Microsoft의 서명을 받은 것처럼 보이게 했습니다. 오늘날에는 평범한 노트북으로도 몇 초 만에 MD5 충돌을 찾을 수 있으며, RFC 6151은 디지털 서명처럼 충돌 저항성이 필요한 곳에서는 MD5를 더 이상 사용할 수 없다고 명시합니다.
다만 불완전한 다운로드나 디스크에서 뒤집힌 비트 같은 우발적 손상을 잡아내는 체크섬으로는 MD5도 여전히 쓸 만하며, 캐시 키나 신뢰할 수 있는 데이터의 중복 제거에도 사용할 수 있습니다. 파일이나 그 체크섬이 공격자에게서 올 수 있다면 대신 SHA-256을 사용하십시오.
16진수, Base64, 그리고 해시가 일치하지 않을 때
MD5는 보통 16진수로 출력되며, md5sum도 이 형식으로 출력합니다. 일부 프로토콜은 대신 원시 16바이트를 Base64로 보냅니다. Amazon S3 같은 클라우드 스토리지 API가 사용하는 HTTP Content-MD5 헤더가 그 예입니다. Base64 출력을 선택하거나, 이미 있는 값은 16진수 Base64 변환 도구로 변환하십시오.
MD5가 다른 도구의 결과와 다르다면 입력 바이트가 다른 것입니다. 흔한 원인은 끝에 붙은 줄 바꿈 문자, Windows 줄 끝, 또는 다른 문자 인코딩입니다. "café"는 UTF-8에서는 5바이트이지만 ISO-8859-1에서는 4바이트이므로, 두 해시에는 공통점이 전혀 없습니다.
$ echo "hello" | md5sum # "hello\n"을 해시
b1946ac92492d2347c6235b4d2611184 -
$ printf 'hello' | md5sum # "hello"를 해시
5d41402abc4b2a76b9719d911017c592 -
명령줄과 코드에서 MD5 계산하기
md5sum file.iso # Linux
md5 file.iso # macOS
certutil -hashfile file.iso MD5 # Windows
Get-FileHash file.iso -Algorithm MD5 # PowerShell
# Python
import hashlib
hashlib.md5('hello'.encode('utf-8')).hexdigest()
// Node.js
require('crypto').createHash('md5').update('hello', 'utf8').digest('hex')
브라우저에 내장된 Web Crypto API는 MD5를 지원하지 않으므로, 이 페이지는 사용자의 기기에서 JavaScript로 MD5를 계산하며 아무것도 업로드하지 않습니다. 결과 아래의 ‘모든 알고리즘’ 표에는 같은 입력의 SHA-1, SHA-256, SHA-384, SHA-512, CRC-32, CRC-32C 값이 표시됩니다.
예시
| 입력 (UTF-8) | MD5 |
|---|---|
Hello, World! | 65a8e27d8879283831b664bd8b7f0ad4 |
Base64.is | 2e3c0e8b828164a8db7f62146ca87e14 |
你好 | 7eca689f0d3389d9dea66ae112e5cfd7 |
자주 묻는 질문
MD5 해시를 복호화할 수 있습니까?
다운로드한 파일을 확인하는 데 MD5로 충분합니까?
우발적인 손상은 확실하게 잡아냅니다. 하지만 충돌을 만드는 비용이 낮기 때문에, 미리 파일을 준비한 사람은 MD5가 같으면서 내용이 다른 두 번째 파일을 만들 수 있습니다. 보안이 중요한 다운로드라면 신뢰할 수 있는 출처의 SHA-256 해시나 서명을 확인하십시오.
MD5 해시의 길이는 얼마입니까?
==로 끝나는 24자입니다. 16진수 32자 문자열은 MD4나 NTLM 해시일 수도 있으며, 해시 식별기에서 가능한 후보를 확인할 수 있습니다.큰 파일의 MD5도 구할 수 있습니까?
md5sum이나 certutil로 해시하는 편이 낫습니다.