해시 생성기 — MD5, SHA-1, SHA-256, SHA-512 온라인 변환
해시 생성기는 텍스트나 파일을 입력하면 MD5, SHA-1, SHA-256, SHA-384, SHA-512 등 다양한 해시 알고리즘의 결과를 한 번에 확인할 수 있는 무료 온라인 도구입니다. 모든 처리는 브라우저에서 이루어지며, 데이터가 외부 서버로 전송되지 않아 민감한 정보도 안전하게 해싱할 수 있습니다.
1. 해시(Hash)란 무엇인가
해시 함수는 임의의 길이를 가진 데이터를 고정된 길이의 문자열로 변환하는 단방향 함수입니다. "단방향"이란 해시 값으로부터 원래 데이터를 복원하는 것이 수학적으로 불가능하다는 의미입니다.
a. 해시 함수의 핵심 특성
- 결정성(Determinism): 같은 입력은 항상 같은 해시 값을 생성합니다.
- 빠른 연산: 어떤 크기의 입력이든 해시 값을 빠르게 계산할 수 있습니다.
- 눈사태 효과(Avalanche Effect): 입력이 1비트만 달라져도 해시 값이 완전히 달라집니다.
- 충돌 저항성(Collision Resistance): 서로 다른 두 입력이 같은 해시 값을 만드는 것이 사실상 불가능합니다.
- 역상 저항성(Pre-image Resistance): 해시 값에서 원래 입력을 추론할 수 없습니다.
b. 해시와 암호화의 차이
해시와 암호화는 자주 혼동되지만, 근본적으로 다른 개념입니다:
| 구분 | 해시(Hash) | 암호화(Encryption) |
|---|---|---|
| 방향 | 단방향 — 복원 불가 | 양방향 — 키로 복호화 가능 |
| 키 필요 여부 | 키 없음 | 암호화/복호화 키 필요 |
| 출력 길이 | 항상 고정 (예: SHA-256 = 256bit) | 입력 길이에 비례 |
| 주요 용도 | 무결성 검증, 비밀번호 저장 | 데이터 기밀성 보호 |
2. 지원하는 해시 알고리즘 비교
이 도구는 현재 가장 널리 사용되는 5가지 해시 알고리즘을 지원합니다.
a. MD5 (Message Digest 5)
1992년 Ronald Rivest가 설계한 128비트 해시 함수입니다. 한때 널리 사용되었으나, 2004년 Wang Xiaoyun 연구팀이 **충돌 공격(Collision Attack)**에 성공하면서 보안 용도로는 더 이상 권장되지 않습니다.
Warning
MD5는 보안 목적(비밀번호 저장, 디지털 서명)에 절대 사용하지 마세요. 파일 체크섬이나 데이터 중복 검사 등 비보안 용도에서만 활용해야 합니다.
MD5 해시 예시:
입력: Hello, World!
MD5: 65a8e27d8879283831b664bd8b7f0ad4
b. SHA-1 (Secure Hash Algorithm 1)
NSA가 설계하고 NIST가 1995년 표준화한 160비트 해시 함수입니다. 2017년 Google이 SHAttered 프로젝트를 통해 실질적인 충돌을 시연한 뒤, 주요 브라우저와 인증 기관에서 퇴출되었습니다. Git은 여전히 SHA-1을 커밋 식별에 사용하지만, 점차 SHA-256으로 전환하고 있습니다.
c. SHA-256 / SHA-384 / SHA-512 (SHA-2 패밀리)
현재 가장 널리 쓰이는 해시 알고리즘 군(群)입니다. NIST가 2001년 표준화했으며, 알고리즘 이름의 숫자가 출력 비트 수를 나타냅니다.
| 알고리즘 | 출력 길이 | 블록 크기 | 주요 사용처 |
|---|---|---|---|
| SHA-256 | 256bit (64자) | 512bit | TLS, 비트코인, JWT, 코드사이닝 |
| SHA-384 | 384bit (96자) | 1024bit | TLS 1.3 기본, 정부/금융 |
| SHA-512 | 512bit (128자) | 1024bit | 긴 다이제스트 필요 시, SSH, IPsec |
SHA-256이 비트코인에 쓰이는 이유: 비트코인의 작업 증명(Proof of Work)은 SHA-256을 두 번 연속 적용(double-SHA-256)하여 블록 해시를 생성합니다. 높은 충돌 저항성과 ASIC 채굴에 적합한 연산 특성이 선택 이유입니다.
3. 해시 생성기 사용 방법
이 도구를 사용하면 텍스트 또는 파일의 해시 값을 손쉽게 확인할 수 있습니다.
a. 텍스트 해시 생성
- 상단의 알고리즘 선택 바에서 원하는 알고리즘을 선택합니다 (복수 선택 가능).
- 왼쪽 입력 패널에서 TEXT 탭이 선택된 상태에서 해싱할 텍스트를 입력합니다.
- 입력 즉시 오른쪽 패널에 선택된 모든 알고리즘의 해시 결과가 표시됩니다.
- 각 결과 오른쪽의 복사 버튼을 클릭하면 해당 해시 값이 클립보드에 복사됩니다.
b. 파일 해시(체크섬) 계산
- 왼쪽 패널 상단에서 FILE 탭을 클릭합니다.
- 파일을 드래그 앤 드롭하거나, 클릭하여 파일을 선택합니다.
- 업로드된 파일의 해시가 자동으로 계산됩니다.
- 파일 이름과 크기가 표시되며, 모든 선택된 알고리즘의 해시 결과를 확인할 수 있습니다.
Note
파일은 브라우저 내에서만 처리되며, 서버로 전송되지 않습니다. 대용량 파일의 경우 처리 시간이 다소 길어질 수 있습니다.
c. 결과 활용
- 개별 복사: 각 알고리즘 결과 옆의 복사 아이콘을 클릭합니다.
- 전체 복사: 결과 패널 상단의 복사 버튼으로 모든 해시 결과를 한 번에 복사합니다.
- 처리 시간: 각 알고리즘별 처리 시간(ms)이 표시되어 성능을 비교할 수 있습니다.
4. 해시 활용 사례
해시 함수는 IT 전반에서 매우 다양하게 활용됩니다.
a. 파일 무결성 검증 (다운로드 체크섬)
소프트웨어를 다운로드한 후, 배포자가 제공한 SHA-256 해시와 다운로드한 파일의 해시를 비교하여 파일이 변조되지 않았는지 확인합니다. Linux 배포판, 보안 소프트웨어, 펌웨어 등에서 필수적인 검증 과정입니다.
# macOS/Linux에서 파일 체크섬 확인
shasum -a 256 downloaded-file.iso
b. 비밀번호 저장
데이터베이스에 비밀번호를 평문으로 저장하면 유출 사고 시 치명적입니다. 대신 비밀번호를 해시하여 저장하고, 로그인 시 입력된 비밀번호의 해시와 비교합니다.
Important
단순 SHA-256 해시만으로 비밀번호를 저장하면 레인보우 테이블 공격에 취약합니다. 비밀번호 저장에는 반드시 Bcrypt, Argon2 같은 전용 키 파생 함수(KDF)를 사용하세요.
c. 디지털 서명과 인증서
TLS/SSL 인증서, 코드 사이닝, 이메일 서명 등에서 해시 함수는 서명할 메시지의 다이제스트를 생성하는 핵심 역할을 합니다. 서명자는 원본 데이터가 아닌 해시 값에 서명하여 효율성과 보안을 동시에 확보합니다.
d. 블록체인과 머클 트리
블록체인에서 각 블록은 이전 블록의 해시를 포함하여 체인 구조의 무결성을 보장합니다. 또한 머클 트리(Merkle Tree)는 대량의 트랜잭션을 해시 트리로 구성하여 개별 트랜잭션의 포함 여부를 효율적으로 검증할 수 있게 합니다.
e. 데이터 중복 제거 (Deduplication)
클라우드 스토리지나 백업 시스템에서 파일의 해시를 먼저 계산하고, 같은 해시가 이미 저장되어 있으면 중복 저장을 생략합니다. 이를 통해 저장 공간을 절약할 수 있습니다.
5. 해시 보안 주의사항
a. 솔트(Salt)를 사용해야 하는 이유
동일한 비밀번호는 항상 같은 해시를 생성하기 때문에, 공격자가 미리 계산해둔 레인보우 테이블로 해시를 역추적할 수 있습니다. **솔트(Salt)**는 각 사용자마다 고유한 랜덤 값을 비밀번호에 추가하여 이 문제를 해결합니다.
해시(비밀번호 + 솔트) = 고유한 해시 값
같은 비밀번호라도 솔트가 다르면 완전히 다른 해시 생성
b. 이미 깨진 알고리즘 사용 시 주의
- MD5: 충돌 공격 실증됨 (2004년). 체크섬 용도로만 사용.
- SHA-1: 실질적 충돌 시연 (SHAttered, 2017). 신규 시스템에서 사용 금지.
- SHA-256 이상: 현재까지 알려진 실질적 공격 없음. 보안 용도에 권장.
c. 비밀번호 해싱에는 KDF를 사용하세요
일반 해시 함수(SHA-256 등)는 빠르게 설계된 함수이므로, 공격자가 초당 수십억 개의 해시를 시도할 수 있습니다. 비밀번호 해싱 전용 함수(Bcrypt, Argon2, scrypt)는 의도적으로 느리게 설계되어 무차별 대입 공격을 방어합니다.
| 알고리즘 | 초당 해시 횟수 (GPU) | 비밀번호 저장 적합성 |
|---|---|---|
| SHA-256 | ~수십억 회 | 부적합 |
| Bcrypt (cost=12) | ~수천 회 | 적합 |
| Argon2id | ~수백 회 | 매우 적합 |
6. 프로그래밍 언어별 해시 생성 예시
a. JavaScript (Web Crypto API)
async function sha256(message) {
const data = new TextEncoder().encode(message);
const hash = await crypto.subtle.digest('SHA-256', data);
return Array.from(new Uint8Array(hash))
.map(b => b.toString(16).padStart(2, '0'))
.join('');
}
b. Python
import hashlib
text = "Hello, World!"
print(hashlib.sha256(text.encode()).hexdigest())
# 출력: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
c. Node.js
const crypto = require('crypto');
const hash = crypto.createHash('sha256')
.update('Hello, World!')
.digest('hex');
console.log(hash);
d. Java
import java.security.MessageDigest;
import java.nio.charset.StandardCharsets;
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest("Hello, World!".getBytes(StandardCharsets.UTF_8));
StringBuilder hex = new StringBuilder();
for (byte b : hash) hex.append(String.format("%02x", b));
System.out.println(hex.toString());
e. Go
package main
import (
"crypto/sha256"
"fmt"
)
func main() {
h := sha256.Sum256([]byte("Hello, World!"))
fmt.Printf("%x\n", h)
}
7. 해시 알고리즘 선택 가이드
용도에 따라 적절한 해시 알고리즘을 선택하는 것이 중요합니다.
| 용도 | 권장 알고리즘 | 이유 |
|---|---|---|
| 파일 체크섬 (빠른 검증) | SHA-256 | 속도와 보안의 균형 |
| 비밀번호 저장 | Bcrypt / Argon2 | 의도적 저속 설계 |
| 디지털 서명 | SHA-256 이상 | NIST/표준 기관 권장 |
| Git 커밋 식별 | SHA-1 (레거시) → SHA-256 | Git의 전환 진행 중 |
| 블록체인 | SHA-256 (double) | 비트코인 표준 |
| HMAC (메시지 인증) | SHA-256 / SHA-512 | RFC 2104 권장 |
| 데이터 중복 제거 | SHA-256 | 충돌 확률 극히 낮음 |
| 비보안 체크섬 | MD5 / CRC32 | 빠른 속도 (보안 불필요 시) |
Tip
특별한 이유가 없다면 SHA-256을 기본으로 선택하세요. 대부분의 환경에서 충분한 보안과 성능을 제공합니다.