100% 비공개: 브라우저 내장 Web Crypto API와 로컬 MD5 구현을 사용합니다. 네트워크 요청 없음.

해시 생성

해시가 여기에 표시됩니다...

모든 알고리즘 한 번에

동일한 입력을 다섯 가지 알고리즘으로 동시에 해시합니다.

MD5
SHA-1
SHA-256
SHA-384
SHA-512

해시 비교

두 해시 값을 붙여넣어 일치 여부를 확인합니다 — 파일 무결성 검사나 체크섬 비교에 유용합니다.

해시 함수란?

해시 함수는 임의 길이의 입력을 해시, 다이제스트 또는 체크섬이라 불리는 고정 길이 출력으로 변환하는 수학적 알고리즘입니다. 해시 함수는 현대 암호학의 기초이며 디지털 서명, 인증서 검증, 비밀번호 저장, 데이터 무결성 검사, 콘텐츠 주소 지정에 사용됩니다.

암호학적 해시 함수를 정의하는 세 가지 속성: 결정성(동일한 입력은 항상 동일한 출력 생성), 눈사태 효과(입력의 작은 변경이 출력을 급격히 변경), 단방향성(해시에서 원본 입력을 역추적 불가). 안전한 해시 함수는 충돌 공격(동일한 해시를 생성하는 두 개의 다른 입력을 찾는 것)에도 저항합니다.

해시 알고리즘 비교

알고리즘 출력 길이 보안 상태 일반적인 사용 사례
MD5 128비트 (32자 hex) 취약 체크섬, 캐시 키, 비보안 중복 제거
SHA-1 160비트 (40자 hex) 사용 중단 레거시 시스템, Git 객체 ID (전환 중)
SHA-256 256비트 (64자 hex) 안전 TLS 인증서, 코드 서명, Bitcoin, JWT
SHA-384 384비트 (96자 hex) 강력 TLS 1.2+, 정부/규정 준수 요구 사항
SHA-512 512비트 (128자 hex) 강력 고보안 애플리케이션, 디지털 포렌식, 보관

Web Crypto API로 JavaScript에서 해싱

최신 브라우저는 SHA 해시를 의존성 없이 완전히 클라이언트 사이드에서 계산하기 위한 crypto.subtle.digest() API를 제공합니다. 다음 예제는 SHA-256 해시를 계산하고 결과를 16진수 문자열로 변환합니다:

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

// 사용법
const hash = await sha256('hello world');
console.log(hash);
// => b94d27b9934d3e08a52e52d7da7dabfac484efe04294e576f4...

Web Crypto는 MD5를 암호학적으로 안전하지 않다고 판단하여 지원하지 않습니다. MD5의 경우 순수 JavaScript 구현이 대체로 사용됩니다.

사용 사례에 맞는 올바른 해시 알고리즘 선택

해시 함수는 소프트웨어 엔지니어링에서 다양한 목적으로 사용됩니다 — 데이터 무결성 검증부터 비밀번호 저장, 디지털 서명까지. 잘못된 알고리즘을 선택하면 보안 취약점에 노출되거나 불필요한 성능 오버헤드가 발생합니다.

해시 알고리즘 선택 가이드

  • 비밀번호 저장 → bcrypt, scrypt, 또는 Argon2: 비밀번호에 MD5, SHA-1, SHA-256을 사용하지 마세요. 이러한 범용 해시는 너무 빠릅니다 — GPU를 가진 공격자는 초당 수십억 개의 SHA-256 해시를 시도할 수 있습니다. 비밀번호 해싱 알고리즘은 의도적으로 느리며 구성 가능한 작업 팩터를 포함합니다.
  • 데이터 무결성 → SHA-256: 파일 다운로드 검증, 체크섬, 전송 중 데이터 무결성에 사용합니다.
  • 해시 테이블 / 중복 제거 → xxHash 또는 MurmurHash: 암호학적 보안보다 속도가 필요한 경우(캐시 키, 블룸 필터, 데이터 중복 제거), 비암호학적 해시 함수는 SHA-256보다 10~100배 빠릅니다.
  • 디지털 서명 → SHA-256 또는 SHA-3: 문서, 인증서, JWT 토큰 서명에 사용합니다.
  • API 인증 → HMAC-SHA256: 웹훅 서명과 API 요청 인증에 사용합니다. HMAC은 해시에 비밀 키를 추가하여 변조를 방지합니다. 인증에 HMAC 없이 일반 해시를 사용하지 마세요.

더 이상 사용되지 않는 안전하지 않은 해시 알고리즘

  • MD5: 충돌 공격이 간단합니다 — 두 개의 다른 파일이 몇 초 만에 같은 MD5 해시를 생성할 수 있습니다. 보안 외 체크섬(안전한 해시를 사용할 수 없을 때 다운로드 무결성 검증 등)에만 허용됩니다.
  • SHA-1: 2017년에 충돌 공격이 입증되었습니다(SHAttered). Git은 내부적으로 아직 SHA-1을 사용하지만 SHA-256으로 마이그레이션 중입니다. 새로운 보안 애플리케이션에는 사용하지 마세요.

자주 묻는 질문

해시 함수란 무엇입니까?

해시 함수는 입력(텍스트, 파일 또는 바이너리 데이터)을 받아 고정 길이의 문자열을 생성합니다. 동일한 입력은 항상 동일한 해시를 생성하지만 단일 문자 변경만으로도 완전히 다른 해시가 생성됩니다. 이러한 특성 덕분에 해시는 데이터 변경 탐지, 다운로드 검증, 원본 값을 저장하지 않고 비밀번호를 저장하는 데 유용합니다.

MD5와 SHA-256의 차이점은 무엇입니까?

MD5는 128비트(32자 16진수) 다이제스트를 생성하며 계산이 빠르지만 암호학적 충돌을 의도적으로 만들 수 있습니다 — 두 개의 다른 입력이 동일한 MD5 해시를 생성하도록 만들 수 있습니다. 이로 인해 MD5는 보안 목적으로 사용하기에 부적합합니다. SHA-256은 256비트 다이제스트를 생성하며 알려진 모든 공격에 안전합니다. 보안에 민감한 애플리케이션에는 SHA-256 또는 SHA-512를 사용하십시오. MD5는 캐시 키나 비핵심 체크섬과 같은 비보안 용도에만 사용 가능합니다.

해싱은 되돌릴 수 있습니까? 해시를 복호화할 수 있습니까?

아닙니다 — 해싱은 설계상 단방향 작업입니다. 해시에서 원본 입력을 복구할 수 있는 알고리즘은 없습니다. 그러나 짧거나 일반적인 입력은 무차별 대입이나 사전 계산된 레인보우 테이블을 통해 찾을 수 있습니다. 따라서 비밀번호는 SHA-256과 같은 빠른 알고리즘이 아닌 bcrypt나 Argon2와 같은 느리고 솔트를 사용하는 알고리즘으로 해시해야 합니다. 이 페이지의 해시 알고리즘은 데이터 무결성과 체크섬을 위해 설계되었으며 비밀번호 저장용이 아닙니다.

비밀번호 해싱에 SHA-256을 사용해야 합니까?

아닙니다. SHA-256과 기타 범용 해시 함수는 의도적으로 빠르게 설계되어 최신 하드웨어에서 무차별 대입 공격이 매우 쉽습니다(초당 수십억 번의 해시). 비밀번호에는 전용 느린 해싱 알고리즘을 사용하십시오: bcrypt(가장 널리 지원), Argon2id(현대 모범 사례, 비밀번호 해싱 대회 우승), scrypt. 이들은 계산 비용이 높도록 설계되었으며 레인보우 테이블 공격을 방어하기 위한 내장 솔팅을 포함합니다.

관련 개발자 도구