logo
GeekFormat

MD5 해시값

입력0자 · 0바이트
示例:
All Hashes (side-by-side)
Computed via Web Crypto API
MD5
32 hex
SHA-1
40 hex
SHA-256
64 hex
SHA-384
96 hex
SHA-512
128 hex

무료 온라인 MD5 해시 계산 도구. 텍스트, 파일, 일괄 행별, HMAC-MD5 네 가지 모드를 지원합니다. UTF-8/Latin1 인코딩 선택 가능, 대문자 출력 및 8자리 그룹 공백을 지원합니다. ⚠️ MD5는 안전하지 않습니다. 비밀번호 저장에 사용하지 마세요.

관련 추천

사용 사례

  • 파일 무결성 검증: 소프트웨어 다운로드 후 MD5를 계산하여 공식 사이트가 제공하는 핑거프린트와 비교해 파일이 손상되지 않았는지 확인
  • 일괄 다이제스트 생성: 여러 설정 텍스트의 MD5 다이제스트를 한 번에 생성하여 빠른 대조표나 릴리스 기록에 사용
  • HMAC-MD5 서명: 레거시 시스템 연동 시 키와 다이제스트 결과 검증(호환 시나리오만)
  • 데이터 중복 분석: MD5를 사용하여 로그나 데이터에서 중복 항목을 빠르게 판단
  • 캐시 키 생성: MD5를 짧은 고유 식별자로 사용하여 캐시나 인덱스 시스템에 활용
  • 학습 연구: 해시 알고리즘 원리를 이해하고 MD5/SHA1/SHA256 출력 차이 비교

주요 기능

  • 네 가지 계산 모드: 텍스트, 파일, 일괄 행별, HMAC-MD5를 지원하여 일반적인 검증 시나리오를 커버
  • UTF-8/Latin1 인코딩 선택 가능: 문자 인코딩을 전환하여 다른 시스템의 해시 입력에 맞춤
  • 대문자 출력 및 8자리 그룹: MD5 결과를 대문자 형식으로 전환 가능하며 8자리마다 공백을 삽입하여 읽기 쉽게 함
  • 파일 분할 해시: 큰 파일은 증분 읽기로 계산하여 메모리 오버플로우를 피하고 인터페이스는 항상 부드러움
  • 일괄 행별 지원: 각 행의 텍스트를 독립적으로 계산하여 '원문 → 해시값' 대조표를 출력
  • 한 번의 클릭으로 결과 복사: 해시값을 클립보드에 직접 복사 가능

이용 방법

  1. 모드 선택: 텍스트(문자열 입력), 파일(드래그 앤 드롭 업로드), 일괄 행별(각 행 독립 계산), HMAC-MD5
  2. 매개변수 설정: 문자 인코딩(UTF-8/Latin1), 대문자 출력, 8자리 그룹 공백 선택
  3. 내용 입력: 텍스트 입력, 파일 업로드 또는 일괄 내용 붙여넣기
  4. 결과 확인: 해시 결과를 복사하여 검증, 릴리스 노트, 스크립트에 사용

자주 묻는 질문

MD5는 주로 어떤 시나리오에서 사용되나요?

MD5는 파일 무결성 검증(다운로드 패키지 확인 등), 빠른 다이제스트 생성, 레거시 시스템 호환, 캐시 키, 데이터 중복 제거 등 비보안 시나리오에서 자주 사용됩니다. MD5는 128비트(32자리 16진수)를 출력하며 계산 속도가 빨라 보안 요구사항이 낮은 검증 시나리오에 적합합니다.

MD5와 SHA256의 차이점은 무엇인가요?

MD5는 128비트(32자리 Hex)를 출력하고 SHA256은 256비트(64자리 Hex)를 출력합니다. MD5는 더 빠르지만 깨졌습니다; SHA256은 실용적인 충돌 공격이 발견되지 않았으며 현대 보안 시나리오에서 첫 번째 선택입니다.

SHA256 도구

MD5가 비밀번호 저장에 적합하지 않은 이유는 무엇인가요?

MD5는 계산 속도가 매우 빨라 현대 GPU는 초당 수십억 회 계산할 수 있으며, 솔트가 없으면 레인보우 테이블로 쉽게 깨뜨릴 수 있습니다. 비밀번호 저장에는 bcrypt, scrypt, Argon2 등 느린 해시 알고리즘을 사용해야 합니다.

비밀번호 생성기

MD5가 깨졌는데 아직 사용할 수 있나요?

보안 시나리오(디지털 서명, 비밀번호 저장, TLS 인증서)에서는 절대 사용할 수 없습니다. 하지만 비보안 시나리오(손상 방지 파일 검증, 데이터 중복 제거, 캐시 키)에서는 MD5를 여전히 사용할 수 있습니다. 공격자가 충돌을 만들 동기가 없기 때문입니다.

MD5 해시값을 복호화할 수 있나요?

MD5는 단방향 해시이므로 이론상 복호화할 수 없습니다. 하지만 레인보우 테이블과 무차별 대입 공격으로 일반적인 약한 비밀번호는 초 단위로 찾을 수 있습니다. 이것이 MD5로 비밀번호를 저장하면 안 되는 이유입니다.

큰 파일 해시가 느려지나요?

아니요. 이 도구는 분할 증분 읽기를 사용하여 파일 전체를 메모리에 로드하지 않으므로 수 GB 파일도 부드럽게 계산할 수 있으며 인터페이스는 항상 응답합니다.

HMAC-MD5란 무엇인가요? 일반 MD5와의 차이점은?

HMAC-MD5는 MD5 기반 메시지 인증 코드 알고리즘으로, 키를 입력으로 필요로 하며 메시지 무결성과 진정성을 검증하는 데 사용됩니다. MD5 자체에 충돌 문제가 있더라도 키를 모르는 경우 HMAC-MD5는 여전히 안전합니다(하지만 HMAC-SHA256으로 마이그레이션하는 것이 좋습니다).

HMAC 생성기

MD5란 무엇인가요?

MD5(Message-Digest Algorithm 5)는 Ronald Rivest가 1991년에 설계한 128비트 해시 함수입니다(RFC 1321). 임의의 길이의 입력을 고정된 32자리 16진수 핑거프린트로 변환합니다. MD5는 한때 디지털 서명, 인증서 검증, 비밀번호 저장에 널리 사용되었으나, 2004년 왕샤오윤 팀이 처음으로 충돌 공격을 시연했고 2008년 Flame 악성코드가 MD5 충돌을 이용해 CA 인증서를 위조했으며 2024년에는 원상 공격을 시연한 새로운 연구가 발표되었습니다.

**MD5의 보안 상태**: NIST는 2011년 SP 800-131A에서 디지털 서명과 보안 시나리오에서의 MD5 사용을 공식적으로 폐기했습니다. 하지만 MD5는 비보안 시나리오에서는 여전히 유용합니다: 파일 무결성 검증(다운로드 손상 확인), 데이터 중복 제거, 캐시 키, 로그 분석. 판단 기준: 공격자가 충돌을 만들 동기와 능력이 있는가? 없다면 MD5의 빠른 속도는 오히려 장점입니다.

**MD5가 비밀번호 저장에 사용되어서는 안 되는 이유**: MD5는 계산이 매우 빨라 현대 GPU는 초당 수십억 회 계산할 수 있으며, 레인보우 테이블과 결합하면 일반적인 비밀번호를 초 단위로 깨뜨릴 수 있습니다. 비밀번호 저장에는 bcrypt, scrypt, Argon2 등 '느린 해시' 알고리즘을 사용해야 합니다 — 이러한 알고리즘에는 설정 가능한 작업 계수가 있어 무차별 대입 공격 비용을 매우 높입니다.

**HMAC-MD5의 보안성**: 순수한 MD5는 깨졌지만 HMAC-MD5(키 기반 해시 메시지 인증 코드)는 키를 모르는 경우 여전히 안전합니다. HMAC의 구성 방식이 해시 함수의 충돌 저항성에 직접 의존하지 않기 때문입니다. 하지만 새로운 시스템에서는 HMAC-SHA256으로 마이그레이션하는 것이 좋습니다.

이 도구는 순수 JavaScript로 MD5 계산을 구현했습니다(Web Crypto API는 MD5를 지원하지 않습니다). 모든 계산은 브라우저 로컬에서 완료되며 파일은 분할 증분 읽기를 사용하여 서버에 업로드되지 않습니다. 개발자 도구 네트워크 패널을 열면 외부 요청이 없음을 확인할 수 있습니다.

术语表

해시 함수 (Hash Function)
임의의 길이의 입력을 고정된 길이의 출력으로 매핑하는 수학적 함수. 좋은 해시 함수는 단방향성(출력에서 입력을 역추론할 수 없음), 충돌 저항성(다른 두 입력이 같은 출력을 생성하는 것을 찾기 어려움), 눈사태 효과(입력의 작은 변화가 출력을 완전히 다르게 만듦)를 갖추고 있습니다.
충돌 공격 (Collision Attack)
같은 해시 출력을 생성하는 두 개의 다른 입력을 찾는 것. MD5의 충돌 공격은 2004년 왕샤오윤 팀에 의해 실현되었으며 수 초 내에 충돌 쌍을 생성할 수 있어 디지털 서명 위조가 가능해졌습니다.
원상 공격 (Preimage Attack)
해시 출력이 주어졌을 때 해당 출력을 생성하는 입력을 찾는 것. 충돌 공격보다 어렵지만 MD5의 원상 저항성은 2024년 새로운 연구에 의해 크게 약화되었습니다.
레인보우 테이블 (Rainbow Table)
미리 계산된 해시값→원문 매핑 테이블로 약한 비밀번호 해시를 빠르게 깨뜨리는 데 사용됩니다. 솔트(salt)를 사용하면 레인보우 테이블 공격을 방어할 수 있습니다.
HMAC (Hash-based Message Authentication Code)
해시 함수 기반의 메시지 인증 코드로 키를 사용하여 메시지를 인증하고 데이터 변조를 방지합니다. HMAC-MD5와 HMAC-SHA256이 일반적인 변형입니다.HMAC 생성기
bcrypt
비밀번호 저장 전용으로 설계된 느린 해시 알고리즘. 내장 솔트와 조정 가능한 작업 계수(cost factor)를 갖추고 있어 무차별 대입 공격 비용을 매우 높입니다. 비밀번호 저장에 권장되는 알고리즘 중 하나입니다.
체크섬 (Checksum)
데이터 무결성을 검증하기 위한 작은 고정값. MD5, SHA-1, SHA-256은 체크섬으로 자주 사용되며 해시값을 비교하여 파일이 전송 중 손상되었는지 판단합니다.
눈사태 효과 (Avalanche Effect)
입력의 작은 변화(1비트 변경이라도)가 출력 해시값의 극적이고 예측 불가능한 변화를 일으키는 것. MD5에는 충돌 공격이 존재하지만 눈사태 효과는 여전히 양호하며, 이것이 비보안 검증 시나리오에서 MD5가 여전히 사용 가능한 이유입니다.
RFC 1321
MD5 알고리즘의 공식 표준 문서. Ronald Rivest가 1992년에 IETF에 제출했으며 MD5의 알고리즘 절차와 테스트 케이스가 상세히 기술되어 있습니다.
분할 해시 (Chunked Hashing)
큰 파일을 처리할 때 파일 전체를 한 번에 메모리에 로드하지 않고 청크 단위로 읽어 해시 상태를 증분 업데이트하는 방법. 이 도구는 큰 파일에 분할 해시 기술을 사용하여 메모리 오버플로우와 인터페이스 정지를 피합니다.

주요 해시 알고리즘 비교

알고리즘출력 비트 수Hex 길이보안성속도권장 용도
MD5128비트32문자❌ 깨짐 (충돌/원상)매우 빠름파일 검증, 중복 제거, 캐시 키
SHA-1160비트40문자❌ 충돌 공격 (2017)빠름Git, 레거시 시스템 호환
SHA-256256비트64문자✅ 안전중간디지털 서명, 인증서, 블록체인
SHA-512512비트128문자✅ 안전빠름 (64비트 CPU)고보안 시나리오, 비밀번호 파생
bcrypt-60문자✅ 비밀번호 전용느림 (조정 가능)비밀번호 저장

MD5 보안 이벤트 타임라인

연도이벤트영향
1991Ron Rivest가 MD5 설계 (RFC 1321)MD4를 대체하여 주류 해시 알고리즘이 됨
1996MD5 의사 충돌 결함이 처음 발견됨학계에서 MD5 보안성에 의문을 제기하기 시작함
2004왕샤오윤 팀이 MD5 충돌 공격 시연MD5 디지털 서명의 보안성이 완전히 깨짐
2008Flame 악성코드가 MD5 충돌을 이용해 CA 인증서 위조NIST가 디지털 서명에서 MD5 사용을 공식적으로 폐기
2011NIST SP 800-131A가 MD5 보안 용도를 공식적으로 금지미국 정부 시스템이 MD5를 전면 사용 중단
2024새로운 원상 공격 논문 발표MD5 마지막 방어선(원상 저항성)이 돌파됨

Code Examples

MD5/Hashing in JavaScript (Web Crypto supports SHA, MD5 needs library)

// Note: Web Crypto API does NOT support MD5 (deprecated)
// Use SHA-256 instead for new projects
async function sha256(message) {
  const msgBuffer = new TextEncoder().encode(message);
  const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
  return Array.from(new Uint8Array(hashBuffer)).map(b => b.toString(16).padStart(2,'0')).join('');
}
sha256('Hello World').then(console.log);

// MD5 in Node.js using crypto module
const crypto = require('crypto');
const md5 = crypto.createHash('md5').update('Hello World').digest('hex');
console.log(md5); // b10a8db164e0754105b7a99be72e3fe5

MD5 Hashing in Python

import hashlib
text = 'Hello World'
md5_hash = hashlib.md5(text.encode('utf-8')).hexdigest()
print(md5_hash)  # b10a8db164e0754105b7a99be72e3fe5

# File MD5 (chunked for large files)
def md5_file(filepath, chunk_size=8192):
    md5 = hashlib.md5()
    with open(filepath, 'rb') as f:
        while chunk := f.read(chunk_size):
            md5.update(chunk)
    return md5.hexdigest()

# HMAC-MD5
import hmac
hmac_md5 = hmac.new(b'secret-key', b'Hello World', hashlib.md5).hexdigest()
print(hmac_md5)

MD5 Hashing in Java

import java.security.MessageDigest;
import java.nio.charset.StandardCharsets;

public class MD5Example {
    public static String md5(String input) throws Exception {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] hash = md.digest(input.getBytes(StandardCharsets.UTF_8));
        StringBuilder sb = new StringBuilder();
        for (byte b : hash) sb.append(String.format("%02x", b));
        return sb.toString();
    }
    public static void main(String[] args) throws Exception {
        System.out.println(md5("Hello World"));
        // b10a8db164e0754105b7a99be72e3fe5
    }
}
// Note: Use SHA-256 for new code: MessageDigest.getInstance("SHA-256")

Authoritative References