MD5 해시값
무료 온라인 MD5 해시 계산 도구. 텍스트, 파일, 일괄 행별, HMAC-MD5 네 가지 모드를 지원합니다. UTF-8/Latin1 인코딩 선택 가능, 대문자 출력 및 8자리 그룹 공백을 지원합니다. ⚠️ MD5는 안전하지 않습니다. 비밀번호 저장에 사용하지 마세요.
무료 온라인 MD5 해시 계산 도구. 텍스트, 파일, 일괄 행별, HMAC-MD5 네 가지 모드를 지원합니다. UTF-8/Latin1 인코딩 선택 가능, 대문자 출력 및 8자리 그룹 공백을 지원합니다. ⚠️ MD5는 안전하지 않습니다. 비밀번호 저장에 사용하지 마세요.
MD5는 파일 무결성 검증(다운로드 패키지 확인 등), 빠른 다이제스트 생성, 레거시 시스템 호환, 캐시 키, 데이터 중복 제거 등 비보안 시나리오에서 자주 사용됩니다. MD5는 128비트(32자리 16진수)를 출력하며 계산 속도가 빨라 보안 요구사항이 낮은 검증 시나리오에 적합합니다.
MD5는 128비트(32자리 Hex)를 출력하고 SHA256은 256비트(64자리 Hex)를 출력합니다. MD5는 더 빠르지만 깨졌습니다; SHA256은 실용적인 충돌 공격이 발견되지 않았으며 현대 보안 시나리오에서 첫 번째 선택입니다.
SHA256 도구MD5는 계산 속도가 매우 빨라 현대 GPU는 초당 수십억 회 계산할 수 있으며, 솔트가 없으면 레인보우 테이블로 쉽게 깨뜨릴 수 있습니다. 비밀번호 저장에는 bcrypt, scrypt, Argon2 등 느린 해시 알고리즘을 사용해야 합니다.
비밀번호 생성기보안 시나리오(디지털 서명, 비밀번호 저장, TLS 인증서)에서는 절대 사용할 수 없습니다. 하지만 비보안 시나리오(손상 방지 파일 검증, 데이터 중복 제거, 캐시 키)에서는 MD5를 여전히 사용할 수 있습니다. 공격자가 충돌을 만들 동기가 없기 때문입니다.
MD5는 단방향 해시이므로 이론상 복호화할 수 없습니다. 하지만 레인보우 테이블과 무차별 대입 공격으로 일반적인 약한 비밀번호는 초 단위로 찾을 수 있습니다. 이것이 MD5로 비밀번호를 저장하면 안 되는 이유입니다.
아니요. 이 도구는 분할 증분 읽기를 사용하여 파일 전체를 메모리에 로드하지 않으므로 수 GB 파일도 부드럽게 계산할 수 있으며 인터페이스는 항상 응답합니다.
HMAC-MD5는 MD5 기반 메시지 인증 코드 알고리즘으로, 키를 입력으로 필요로 하며 메시지 무결성과 진정성을 검증하는 데 사용됩니다. MD5 자체에 충돌 문제가 있더라도 키를 모르는 경우 HMAC-MD5는 여전히 안전합니다(하지만 HMAC-SHA256으로 마이그레이션하는 것이 좋습니다).
HMAC 생성기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를 지원하지 않습니다). 모든 계산은 브라우저 로컬에서 완료되며 파일은 분할 증분 읽기를 사용하여 서버에 업로드되지 않습니다. 개발자 도구 네트워크 패널을 열면 외부 요청이 없음을 확인할 수 있습니다.
| 알고리즘 | 출력 비트 수 | Hex 길이 | 보안성 | 속도 | 권장 용도 |
|---|---|---|---|---|---|
MD5 | 128비트 | 32문자 | ❌ 깨짐 (충돌/원상) | 매우 빠름 | 파일 검증, 중복 제거, 캐시 키 |
SHA-1 | 160비트 | 40문자 | ❌ 충돌 공격 (2017) | 빠름 | Git, 레거시 시스템 호환 |
SHA-256 | 256비트 | 64문자 | ✅ 안전 | 중간 | 디지털 서명, 인증서, 블록체인 |
SHA-512 | 512비트 | 128문자 | ✅ 안전 | 빠름 (64비트 CPU) | 고보안 시나리오, 비밀번호 파생 |
bcrypt | - | 60문자 | ✅ 비밀번호 전용 | 느림 (조정 가능) | 비밀번호 저장 |
| 연도 | 이벤트 | 영향 |
|---|---|---|
1991 | Ron Rivest가 MD5 설계 (RFC 1321) | MD4를 대체하여 주류 해시 알고리즘이 됨 |
1996 | MD5 의사 충돌 결함이 처음 발견됨 | 학계에서 MD5 보안성에 의문을 제기하기 시작함 |
2004 | 왕샤오윤 팀이 MD5 충돌 공격 시연 | MD5 디지털 서명의 보안성이 완전히 깨짐 |
2008 | Flame 악성코드가 MD5 충돌을 이용해 CA 인증서 위조 | NIST가 디지털 서명에서 MD5 사용을 공식적으로 폐기 |
2011 | NIST SP 800-131A가 MD5 보안 용도를 공식적으로 금지 | 미국 정부 시스템이 MD5를 전면 사용 중단 |
2024 | 새로운 원상 공격 논문 발표 | MD5 마지막 방어선(원상 저항성)이 돌파됨 |
// 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); // b10a8db164e0754105b7a99be72e3fe5import 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)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")