MD5 해시란
MD5는 해시 함수입니다. 글자 하나부터 큰 파일까지 어떤 입력이든 받아 128비트 크기의 고정된 지문을 만들며, 보통 16진수 32자로 씁니다. 같은 입력은 언제나 같은 해시를 냅니다. 한 글자만 바뀌어도 해시는 완전히 달라집니다. MD5 해시 생성기는 이 값을 바로 계산해 줍니다.
MD5는 1992년 Ron Rivest가 발표했습니다. 지금도 다운로드 페이지의 체크섬, 중복 파일 찾기, 캐시 키, 간단한 변경 감지에 널리 쓰입니다. 다만 더 이상 안전하다고 보지 않으며, 그 이유는 아래에서 설명합니다.
MD5 생성기 사용 방법
텍스트 해시. 해시 대상에서 텍스트를 선택한 상태로 입력란에 입력하거나 붙여넣습니다. 입력하는 동안 해시가 바뀝니다. 텍스트는 입력한 그대로, 공백과 줄바꿈까지 포함해 UTF-8로 해시됩니다.
파일 해시. 파일을 누르고 500MB 이하의 파일을 고릅니다. 파일은 기기 안에서 읽습니다. 해시가 준비되면 파일 이름과 바이트 단위 크기가 표시됩니다.
결과 읽기. 해시 결과 패널에 네 가지 값이 나옵니다.
- MD5: 강조 표시, 16진수 32자
- SHA-1: 40자
- SHA-256: 64자
- SHA-512: 128자
각 값마다 복사 버튼이 있습니다. 대문자가 필요하면 대문자를 누르세요.
알려진 해시와 비교. 다운로드 페이지의 체크섬을 이 칸에 붙여넣습니다. 도구가 네 가지 결과와 모두 비교해 어느 것과 일치하는지 알려 줍니다. 일치하는 값이 없으면 붙여넣은 해시의 길이로 어떤 알고리즘의 값으로 보이는지 알려 줍니다.
MD5의 작동 원리
MD5는 입력을 512비트의 배수가 되도록 채운 다음 블록 단위로 처리합니다. 각 블록은 덧셈, 회전, 논리 연산을 섞는 64라운드의 비트 혼합을 거칩니다. 마지막에 남는 32비트 워드 네 개가 해시입니다. 이렇게 많이 섞기 때문에 결과는 무작위처럼 보이고, 입력 비트가 하나만 바뀌어도 완전히 달라집니다. 이를 눈사태 효과라고 합니다.
예시
| 입력 | MD5 |
|---|---|
| (빈 값) | d41d8cd98f00b204e9800998ecf8427e |
abc |
900150983cd24fb0d6963f7d28e17f72 |
hello |
5d41402abc4b2a76b9719d911017c592 |
Hello |
8b1a9953c4611296a827abf8c47804d7 |
Hello, World! |
65a8e27d8879283831b664bd8b7f0ad4 |
The quick brown fox jumps over the lazy dog |
9e107d9d372bb6826bd81d3542a419d6 |
The quick brown fox jumps over the lazy dog. |
e4d909c290d0fb1ca068ffaddf22cbd0 |
한글 |
52b8c54ab4ea672ee6cdfdfef0a31db4 |
The quick brown fox로 시작하는 두 줄은 마침표 하나 차이인데도 해시가 전혀 닮지 않았습니다.
한글의 MD5는 UTF-8 바이트 ED 95 9C EA B8 80, 6바이트를 해시한 값입니다. 한글 한 글자는 UTF-8로 3바이트입니다. 같은 단어를 EUC-KR(CP949)로 저장한 파일은 바이트가 다르므로 MD5도 다르게 나옵니다.
같은 입력 abc를 다른 알고리즘으로 해시한 결과입니다.
| 알고리즘 | abc의 해시 |
|---|---|
| SHA-1 | a9993e364706816aba3e25717850c26c9cd0d89d |
| SHA-256 | ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad |
보안: MD5를 써도 되는 곳과 안 되는 곳
괜찮은 용도: 파일이 손상 없이 도착했는지 확인하기, 중복 파일 찾기, 캐시 키 만들기, 보안과 무관한 ID.
안 되는 용도: 비밀번호, 전자 서명, 인증서, 누군가 속이려고 파일을 바꾸지 않았다는 증명. MD5에 대한 실제 충돌 공격은 2004년부터 공개되어 있습니다. 공격자는 MD5가 같은 서로 다른 파일 두 개를 만들 수 있습니다.
비밀번호에는 느린 해시가 필요합니다. SHA-256도 비밀번호에는 너무 빠릅니다. 추측 속도를 늦추도록 설계된 bcrypt, scrypt, Argon2를 쓰세요. 5f4dcc3b5aa765d61d8327deb882cf99(“password”라는 단어) 같은 단순 MD5 비밀번호 해시는 조회 사이트에서 즉시 알아냅니다.
다른 방법으로 MD5 해시 구하기
Linux. md5sum file.zip은 해시와 파일 이름을 출력합니다. 텍스트는 echo -n hello | md5sum으로 해시합니다. -n을 빼면 줄바꿈까지 해시됩니다.
macOS. md5 file.zip, 텍스트는 md5 -s hello를 씁니다.
Windows. 명령 프롬프트에서 certutil -hashfile file.zip MD5, PowerShell에서 Get-FileHash file.zip -Algorithm MD5를 씁니다.
Python. hashlib.md5(b'hello').hexdigest()는 5d41402abc4b2a76b9719d911017c592를 돌려줍니다.
Node.js. require('crypto').createHash('md5').update('hello').digest('hex')도 같은 값을 돌려줍니다.
관련 도구
해시가 아니라 비밀번호가 필요하다면 비밀번호 생성기를 쓰세요. 고유 ID가 필요할 때는 무작위 데이터를 해시하는 것보다 UUID 생성기가 더 알맞습니다. 바이너리 데이터를 텍스트로 인코딩하려면 Base64 인코딩 디코딩을 참고하세요.