MD5 해시 생성기

텍스트, 16진수 바이트, 파일의 128비트 MD5 다이제스트를 계산합니다. 입력하는 즉시 해시가 갱신되며, ‘비교 대상’ 필드에 예상 체크섬을 넣으면 일치하는지 알려 줍니다.

모든 알고리즘

브라우저에서만 실행되며 어떤 데이터도 업로드되지 않습니다.

사용 방법

  1. 텍스트를 입력하거나 붙여넣습니다. 원시 바이트를 해시하려면 ‘입력 형식’을 ‘16진수’로 바꾸고, 파일의 바이트를 그대로 해시하려면 ‘파일 열기’를 클릭합니다.
  2. 원래 해시가 다른 문자 집합의 텍스트로 만들어진 경우가 아니라면 ‘문자 인코딩’은 UTF-8로 둡니다.
  3. ‘출력 형식’에서 ‘16진수(소문자)’, ‘16진수(대문자)’, ‘Base64’ 중 하나를 선택합니다.
  4. 다운로드한 파일을 확인하려면 공개된 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.is2e3c0e8b828164a8db7f62146ca87e14
你好7eca689f0d3389d9dea66ae112e5cfd7

자주 묻는 질문

MD5 해시를 복호화할 수 있습니까?
아니요. MD5는 암호화가 아니라 단방향 해시 함수이므로 복호화할 대상이 없습니다. "MD5 복호화" 사이트는 이미 자체 표에 들어 있는 입력만 돌려줄 수 있습니다. 나중에 원래 데이터가 다시 필요하다면 암호화를 사용하고, 비밀로 유지할 필요가 없다면 완전히 되돌릴 수 있는 Base64로 인코딩하십시오.
다운로드한 파일을 확인하는 데 MD5로 충분합니까?

우발적인 손상은 확실하게 잡아냅니다. 하지만 충돌을 만드는 비용이 낮기 때문에, 미리 파일을 준비한 사람은 MD5가 같으면서 내용이 다른 두 번째 파일을 만들 수 있습니다. 보안이 중요한 다운로드라면 신뢰할 수 있는 출처의 SHA-256 해시나 서명을 확인하십시오.

MD5 해시의 길이는 얼마입니까?
128비트, 즉 16바이트입니다. 16진수로는 32자, Base64로는 ==로 끝나는 24자입니다. 16진수 32자 문자열은 MD4나 NTLM 해시일 수도 있으며, 해시 식별기에서 가능한 후보를 확인할 수 있습니다.
큰 파일의 MD5도 구할 수 있습니까?
예. 파일을 열면 업로드 없이 브라우저에서 파일의 바이트를 해시합니다. 한계는 브라우저가 사용할 수 있는 메모리이므로, 수 GB 크기의 파일은 md5sum이나 certutil로 해시하는 편이 낫습니다.
비밀번호를 MD5로 저장해도 됩니까?
아니요. MD5는 빠르게 동작하도록 설계되어 GPU 한 장으로 초당 수십억 개의 추측값을 시험할 수 있습니다. 비밀번호는 솔트를 추가하고 일부러 느리게 동작하는 Argon2id, scrypt, bcrypt, PBKDF2로 저장하십시오. 애초에 강력한 비밀번호를 만들려면 비밀번호 생성기를 사용하십시오.