파일 MD5 검증 도구
파일의 MD5 해시 값을 계산하여 파일 무결성을 검증
파일을 여기로 드래그하세요
모든 파일 유형과 크기 지원
파일 MD5란?
MD5(Message-Digest Algorithm 5)는 널리 사용되는 해시 알고리즘으로, 임의의 파일 내용을 128비트(32개의 16진수 문자) 고정 길이 다이제스트로 매핑합니다. 파일 내용의 미세한 변화라도 완전히 다른 MD5 값을 초래합니다. 파일 MD5 검증 도구는 파일 무결성을 검증하고, 전송 또는 다운로드 과정에서 파일이 변조되거나 손상되지 않았는지 확인하는 데 자주 사용됩니다.
사용 방법
사용 방법
- 업로드 영역을 클릭하거나 파일을 페이지로 끌어다 놓으세요
- 'MD5 계산' 버튼을 클릭하세요
- 계산이 완료되면 MD5 값을 확인하세요
- 검증란에 알려진 MD5 값을 입력해 비교할 수 있습니다
검증 한계
- MD5는 빠른 파일 식별 검사에 유용하지만 보안이 중요한 검증에는 충돌 저항성이 충분하지 않습니다.
- 다운로드나 릴리스의 경우 신뢰할 수 있는 소스에서 해시를 비교하고, 가능하다면 SHA-256을 선호하세요.
활용 사례
기술 원리
MD5는 RFC 1321(Ron Rivest, 1992)에 정의된 Message-Digest Algorithm 5로, 128비트 / 16바이트 다이제스트를 32자리 16진수 문자로 표시합니다. 알고리즘은 Merkle-Damgård 구조를 따릅니다: 입력을 패딩하여 비트 길이가 512 모듈로 448과 합동이 되게 하고(1비트 1 뒤에 0을 채움), 원래 길이를 64비트 리틀 엔디안 정수로 덧붙인 뒤, 패딩된 메시지를 512비트 블록으로 나눕니다. 각 블록은 128비트 내부 상태(A, B, C, D)를 갱신하며, 초기값은 A = 0x67452301, B = 0xEFCDAB89, C = 0x98BADCFE, D = 0x10325476입니다. 비트 단위 함수 F(x,y,z) = (x AND y) OR ((NOT x) AND z), G(x,y,z) = (x AND z) OR (y AND (NOT z)), H(x,y,z) = x XOR y XOR z, I(x,y,z) = y XOR (x OR (NOT z))를 사용해 4그룹 × 16라운드, 총 64라운드를 수행하며, 라운드 상수 T[i] = floor(2^32 * |sin(i+1)|)과 좌측 순환 시프트를 결합합니다. 최종 상태를 리틀 엔디안으로 이어 붙인 것이 다이제스트입니다. 빈 입력의 MD5는 d41d8cd98f00b204e9800998ecf8427e이며, 파이프라인이 정상 동작하는지 빠르게 점검하는 용도로 유용합니다. 브라우저는 crypto.subtle로 MD5를 제공하지 않으므로(W3C Web Crypto 사양이 충돌 공격 때문에 의도적으로 MD5를 제외함), 본 도구는 순수 JavaScript MD5 구현을 브라우저 내에서 실행합니다. 파일은 ArrayBuffer로 메모리에 로드되고, 16바이트 다이제스트를 한 번에 계산하여 32자리 소문자 16진수 문자로 출력합니다. 연산이 메인 스레드에서 실행되므로 수 GB짜리 파일을 해시하면 종료될 때까지 메인 스레드가 점유됩니다. 매우 큰 파일은 디스크에서 스트리밍 처리하는 데스크톱 도구가 더 적합합니다. MD5는 충돌 저항성 측면에서 암호학적으로 깨졌습니다. 왕샤오윈과 위훙보가 2004년(CRYPTO 2005에서 발표) 최초의 실용 충돌 공격을 발표하며 충돌 비용을 약 2^39 연산까지 낮췄습니다. 2008년 Sotirov 등은 선택 전치 충돌로 위조 중간 CA 인증서를 만들었고, 2012년 국가급 악성코드 Flame은 그때까지 공개되지 않았던 선택 전치 MD5 충돌로 Microsoft Terminal Server Licensing 코드 서명 인증서를 위조했습니다. NIST는 2011년 SP 800-131A에서 MD5의 디지털 서명 사용을 금지했으며, CMU CERT는 취약성 노트 VU#836068에서 MD5를 'unsuitable for further use'로 명시했습니다. MD5는 우발적 손상 검출(1비트만 바뀌어도 눈사태 효과로 출력 128비트 중 약 64비트가 뒤집힘)과 신뢰 가능한 입력 기반 중복 파일 검출에는 여전히 쓸 수 있지만, 공격자가 입력을 제어하거나 예측할 수 있는 상황에서는 사용해서는 안 됩니다.
- MD5는 128비트 / 16바이트 다이제스트를 생성하며, 32개의 소문자 16진수 문자로 인코딩; RFC 1321(Rivest, 1992)에 정의.
- 초기 상태 상수 A = 0x67452301, B = 0xEFCDAB89, C = 0x98BADCFE, D = 0x10325476; F/G/H/I 비트 함수와 라운드별 상수 T[i] = floor(2^32 * |sin(i+1)|)를 사용하는 4그룹 각 16라운드, 총 64라운드.
- 빈 입력의 MD5는 d41d8cd98f00b204e9800998ecf8427e - 해싱 파이프라인이 유효한 다이제스트를 반환하는지 빠르게 확인하는 기준.
- 브라우저는 crypto.subtle로 MD5를 제공하지 않습니다(W3C Web Crypto가 의도적으로 제외). 본 도구는 순수 JavaScript MD5 구현을 사용해 파일을 ArrayBuffer로 로드하고, 16바이트 다이제스트를 한 번에 계산해 32자리 소문자 16진수로 출력합니다.
- 메모리 사용: 파일 전체를 단일 ArrayBuffer로 읽어 들인 뒤 해시하므로, 수 GB 파일에는 그만한 탭 메모리가 필요합니다. 탭이 감당할 수 있는 한계를 넘는 파일은 디스크에서 스트리밍하는 데스크톱 도구(md5sum, certutil -hashfile, Get-FileHash)를 사용하세요.
- 충돌 공격: Wang과 Yu(2004) 약 2^39 연산; Sotirov 등(2008) 선택 접두사 충돌로 가짜 CA 인증서 위조; Flame 악성코드(2012) 선택 접두사 충돌로 Microsoft 코드 서명 인증서 위조.
- NIST SP 800-131A가 2011년에 디지털 서명에 MD5 사용을 금지; MD5는 비적대적 무결성 검사와 중복 탐지에만 허용 가능 - 체크섬이 신뢰에 영향을 미치는 경우 SHA-256 이상으로 전환.
예시
빈 파일 MD5 (잘 알려진 상수)
파일: empty.txt (0바이트)
MD5: d41d8cd98f00b204e9800998ecf8427e
이 값은 빈 입력의 MD5입니다 -> 해싱 파이프라인이
끝까지 정상 작동하는지 빠르게 점검할 수 있습니다.
(빈 문자열에 대한 RFC 1321 참조 벡터입니다.)다운로드한 설치 프로그램 검증
파일: setup.bin (3바이트, 내용: abc)
계산된 MD5: 900150983cd24fb0d6963f7d28e17f72
공급업체 MD5: 900150983cd24fb0d6963f7d28e17f72
일치 -> 파일이 올바르게 복사 또는 다운로드됨.
불일치 -> 전송 중 바이트가 손상되었으므로 재다운로드 필요.
(MD5 값은 3바이트 입력 'abc'에 대한 RFC 1321 참조 벡터입니다.
실제로는 입력을 실제 설치 프로그램으로 교체하세요.
알고리즘 출력은 결정적입니다.)두 문서 버전 비교
report-v1.txt (0바이트) -> MD5: d41d8cd98f00b204e9800998ecf8427e
report-v2.txt (3바이트, 내용: abc)
-> MD5: 900150983cd24fb0d6963f7d28e17f72
다른 해시 = 다른 내용. 한 문자만 변경해도 완전히 다른 MD5가
생성되며, 이것이 무결성 검증의 작동 원리입니다.
(두 값 모두 RFC 1321 MD5 참조 벡터입니다.)Hello world 문자열과 파일 비교
MD5("hello") = 5d41402abc4b2a76b9719d911017c592
MD5("hello\n") = b1946ac92492d2347c6235b4d2611184
뒤쪽 줄바꿈이 다이제스트를 변경하므로, 마지막 \n 없이
해당 내용으로 저장된 hello.txt 파일은 첫 번째 줄과 일치하고,
마지막 \n과 함께 저장된 파일은 두 번째 줄과 일치합니다.
다른 운영체제에서 생성된 게시 MD5와 비교할 때 흔히 발생하는
실수입니다.자주 묻는 질문
파일이 서버로 업로드되나요?
아니요. MD5는 File API를 사용해 브라우저 내부에서 로컬로 계산됩니다. 파일 바이트는 청크 단위로 메모리에 읽혀 기기를 떠나지 않고 해싱됩니다. 해시를 실행하는 동안 네트워크 탭에서 확인할 수 있습니다.
MD5는 아직 안전하게 쓸 수 있나요?
보안 용도로는 안전하지 않습니다. MD5는 2004년부터 깨졌으며 충돌을 빠르게 만들 수 있습니다. 따라서 디지털 서명, 비밀번호 저장, 변조 방지 검사에는 사용해서는 안 됩니다. 다만 다운로드 실수나 디스크 오류 등 우발적인 손상을 빠르게 감지하는 체크섬 용도로는 여전히 유용합니다.
MD5가 어떨 때는 소문자, 어떨 때는 대문자로 보이는 이유가 무엇인가요?
MD5는 128비트, 즉 16바이트, 16진수 32자리를 출력합니다. 이를 대문자로 표기할지 소문자로 표기할지는 단순한 표시 방식 차이일 뿐 실제 바이트는 동일합니다. 검증 시에는 대소문자를 구분하지 않고 비교해야 합니다.
여기서 처리할 수 있는 최대 파일 크기는 얼마나 되나요?
최신 데스크톱 브라우저는 메모리가 부족해지기 전까지 수 GB까지 처리할 수 있습니다. 모바일 브라우저는 더 빡빡해서 보통 수백 MB가 한계입니다. 매우 큰 파일은 디스크에서 스트리밍 처리하는 시스템 명령(Linux의 md5sum, Windows의 certutil -hashfile, macOS의 md5)을 사용하세요.
다른 도구의 출력과 MD5가 왜 다른가요?
거의 항상 입력 자체가 1바이트라도 다르기 때문입니다. 줄바꿈 차이(CRLF vs LF), UTF-8 BOM, 끝부분 공백, 또는 파일 버전이 다른 경우입니다. 해시 알고리즘 자체는 결정적이므로 표준을 따르는 모든 MD5 구현은 같은 입력에 대해 같은 결과를 출력합니다.
텍스트의 MD5와 파일의 MD5는 어떻게 다른가요?
MD5는 문자가 아니라 바이트를 해싱합니다. '텍스트의 MD5'는 문자열을 먼저 인코딩(보통 UTF-8)한 뒤 그 바이트를 해싱하고, '파일의 MD5'는 파일 바이트를 직접 읽어 해싱합니다. 같은 문자열이라도 UTF-8과 UTF-16으로 저장하면 MD5 값이 달라집니다.
MD5로 중복 파일을 찾을 수 있나요?
가능합니다. 다만 MD5는 알려진 충돌이 있어 악의적인 사용자가 같은 MD5를 갖는 서로 다른 파일을 만들 수 있다는 점은 유의하세요. 사진이나 다운로드 파일 등 우발적인 중복 탐지에는 MD5가 빠르고 충분히 신뢰할 만합니다. 신뢰가 중요한 중복 제거에는 SHA-256을 사용하세요.