본문으로 건너뛰기

해시 생성기

MD5, SHA-1, SHA-256, SHA-512 해시를 생성하는 무료 온라인 도구입니다.

📝 입력 텍스트

✨ 생성된 해시

MD5128-bit
SHA-1160-bit
SHA-256256-bit ⭐ 권장
SHA-512512-bit

해시 함수는 임의의 크기의 데이터를 고정된 크기의 값으로 변환합니다. 비밀번호 저장, 파일 무결성 검증 등에 사용됩니다. SHA-256이 현재 가장 권장되는 알고리즘입니다.

해시 함수란?

해시 함수는 임의의 크기의 데이터를 고정된 크기의 값(해시)으로 변환하는 단방향 함수입니다. 동일한 입력은 항상 동일한 해시를 생성하며, 해시로부터 원본 데이터를 복원할 수 없습니다.

주요 기능

  • 4가지 알고리즘: MD5, SHA-1, SHA-256, SHA-512
  • 실시간 생성: 입력과 동시에 해시 생성
  • 즉시 복사: 각 해시를 클릭 한 번으로 복사
  • 다국어 지원: UTF-8 완벽 지원 (한글, 일본어, 중국어 등)
  • 추천 알고리즘 표시: SHA-256 권장

지원 알고리즘

MD5 (128-bit) ⚠️

  • 길이: 32자 (16진수)
  • 속도: 매우 빠름
  • 보안: 취약 - 충돌 공격 가능
  • 용도: 체크섬, 레거시 시스템
입력: Hello World
MD5: b10a8db164e0754105b7a99be72e3fe5

SHA-1 (160-bit) ⚠️

  • 길이: 40자 (16진수)
  • 속도: 빠름
  • 보안: 취약 - 충돌 공격 가능
  • 용도: Git (레거시), 체크섬
입력: Hello World
SHA-1: 0a4d55a8d778e5022fab701977c5d840bbc486d0

SHA-256 (256-bit) ⭐ 권장

  • 길이: 64자 (16진수)
  • 속도: 중간
  • 보안: 강력 - 현재 안전
  • 용도: 비밀번호 해싱, 블록체인, 디지털 서명
입력: Hello World
SHA-256: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e

SHA-512 (512-bit)

  • 길이: 128자 (16진수)
  • 속도: SHA-256보다 느림 (64비트 시스템에서는 빠를 수 있음)
  • 보안: 매우 강력
  • 용도: 높은 보안 요구 시
입력: Hello World
SHA-512: 2c74fd17edafd80e8447b0d46741ee243b7eb74dd2149a0ab1b9246fb30382f27e853d8585719e0e67cbda0daa8f51671064615d645ae27acb15bfb1447f459b

사용 사례

1. 비밀번호 저장 (SHA-256 + Salt)

const password = 'myPassword123';
const salt = generateRandomSalt(); // UUID 등
const hash = sha256(password + salt);

// 데이터베이스에 저장
// { username: 'user1', hash: '...', salt: '...' }

⚠️ 주의: 실제로는 bcrypt, argon2 같은 전용 알고리즘 사용 권장!

2. 파일 무결성 검증

# 다운로드한 파일의 해시 확인
$ sha256sum ubuntu-22.04.iso
a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e

# 공식 해시와 비교

3. API 서명

const data = { userId: 123, amount: 100 };
const secret = 'api-secret-key';
const signature = sha256(JSON.stringify(data) + secret);

// 요청 헤더에 포함
// X-Signature: a591a6d40bf420404a011733cfb7b190...

4. Git 커밋 ID

# Git은 SHA-1을 사용 (각 커밋의 고유 ID)
$ git log --oneline
a591a6d Fix bug in login
b10a8db Add new feature

5. 캐시 키 생성

const cacheKey = md5(`user:${userId}:profile`);
cache.set(cacheKey, userData);

6. 데이터 중복 제거

const contentHash = sha256(fileContent);
if (seenHashes.has(contentHash)) {
console.log('중복 파일');
} else {
seenHashes.add(contentHash);
}

해시 충돌

충돌이란?

서로 다른 입력이 동일한 해시를 생성하는 경우:

input1 ≠ input2
hash(input1) = hash(input2) ← 충돌!

알고리즘별 충돌 저항성

알고리즘충돌 저항성상태
MD5❌ 매우 약함2004년부터 충돌 발견
SHA-1❌ 약함2017년 실제 충돌 공개
SHA-256✅ 강함현재까지 안전
SHA-512✅ 매우 강함현재까지 안전

충돌 확률

SHA-256의 경우:

  • 가능한 해시 수: 2^256 ≈ 1.16 × 10^77
  • 생일 역설로 50% 충돌 확률: 2^128번 시도 필요
  • 실용적으로 불가능!

프로그래밍 언어별 사용법

JavaScript (브라우저)

async function sha256(text) {
const encoder = new TextEncoder();
const data = encoder.encode(text);
const hash = await crypto.subtle.digest('SHA-256', data);
const hashArray = Array.from(new Uint8Array(hash));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}

const hash = await sha256('Hello World');

JavaScript (Node.js)

const crypto = require('crypto');

const hash = crypto.createHash('sha256')
.update('Hello World')
.digest('hex');

Python

import hashlib

# SHA-256
hash_sha256 = hashlib.sha256('Hello World'.encode()).hexdigest()

# MD5
hash_md5 = hashlib.md5('Hello World'.encode()).hexdigest()

PHP

<?php
// SHA-256
$hash = hash('sha256', 'Hello World');

// MD5
$hash = md5('Hello World');
?>

Java

import java.security.MessageDigest;

MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest("Hello World".getBytes());

StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) hexString.append('0');
hexString.append(hex);
}

Bash

# SHA-256
echo -n "Hello World" | sha256sum

# MD5
echo -n "Hello World" | md5sum

보안 모범 사례

✅ 올바른 사용

1. 비밀번호 저장 (Salt + Hash)

const bcrypt = require('bcrypt');

// 비밀번호 해싱
const hash = await bcrypt.hash(password, 10);

// 검증
const isValid = await bcrypt.compare(password, hash);

2. API 서명 검증

const expectedSignature = sha256(payload + secret);
if (receivedSignature === expectedSignature) {
// 유효한 요청
}

3. 파일 체크섬

const fileHash = sha256(fileContent);
// 다운로드 후 검증

❌ 잘못된 사용

1. 비밀번호를 단순 해시만 사용

// 잘못됨!
const hash = md5(password);

// 레인보우 테이블 공격에 취약

2. MD5를 보안 목적으로 사용

// 잘못됨!
const signature = md5(data + secret);

// 충돌 공격 가능

3. 해시만으로 인증

// 잘못됨!
if (requestHash === sha256(userId)) {
// 예측 가능
}

실용적인 팁

1. Salt 사용 (비밀번호)

// Salt 추가로 레인보우 테이블 공격 방어
const salt = crypto.randomBytes(16).toString('hex');
const hash = sha256(password + salt);

// 저장: { hash, salt }

2. HMAC 사용 (서명)

// 단순 해시보다 HMAC이 안전
const hmac = crypto.createHmac('sha256', secret)
.update(data)
.digest('hex');

3. 느린 해시 사용 (비밀번호)

// bcrypt, scrypt, argon2는 의도적으로 느림
// 무차별 대입 공격 방어
const hash = await bcrypt.hash(password, 12); // rounds

4. 파일 해시 스트리밍

// 큰 파일은 스트리밍으로 처리
const hash = crypto.createHash('sha256');
const stream = fs.createReadStream('largefile.bin');
stream.on('data', chunk => hash.update(chunk));
stream.on('end', () => {
console.log(hash.digest('hex'));
});

해시 vs 암호화

해시 (Hash)

  • 단방향: 복호화 불가능
  • 고정 길이: 입력 크기와 무관
  • 결정적: 같은 입력 → 같은 출력
  • 용도: 무결성 검증, 비밀번호 저장

암호화 (Encryption)

  • 양방향: 복호화 가능
  • 가변 길이: 입력에 비례
  • 비결정적: 매번 다른 출력 가능
  • 용도: 데이터 보호, 통신 보안

자주 묻는 질문

Q: MD5를 사용해도 되나요?

보안 목적으로는 절대 안 됩니다. 체크섬이나 비보안 용도로만 사용하세요.

Q: 해시로 비밀번호를 저장해도 되나요?

단순 해시는 안전하지 않습니다. bcrypt, argon2, scrypt 같은 전용 알고리즘을 사용하세요.

Q: SHA-256과 SHA-512 중 어느 것이 좋나요?

  • SHA-256: 대부분의 경우 충분, 널리 사용됨
  • SHA-512: 더 강력하지만 느릴 수 있음 (64비트 시스템에서는 빠를 수 있음)

일반적으로 SHA-256 권장!

Q: 해시를 해독할 수 있나요?

아니요. 해시는 단방향 함수입니다. 하지만 레인보우 테이블로 약한 비밀번호는 추측 가능합니다.

Q: 같은 해시가 나올 수 있나요?

이론적으로 가능하지만 (비둘기집 원리), SHA-256의 경우 실용적으로 불가능합니다.

Q: 파일 해시는 어떻게 계산하나요?

이 도구는 텍스트만 지원합니다. 파일 해시는 명령줄 도구나 전용 프로그램을 사용하세요.

관련 도구

성능

  • 생성 속도: 밀리초 미만 (텍스트 기준)
  • 실시간 처리: 입력 즉시 생성
  • 메모리 사용: 최소
  • 오프라인 작동: 완전 지원

브라우저 호환성

이 도구는 Web Crypto API를 사용합니다:

  • Chrome (모든 버전) ✓
  • Firefox (모든 버전) ✓
  • Safari 11+ ✓
  • Edge (모든 버전) ✓

개인정보 보호

이 도구는 완전히 클라이언트 측에서 작동합니다. 입력한 데이터는 서버로 전송되지 않으며, 브라우저에서만 처리됩니다.