ToolActToolAct

해시 생성기

MD5, SHA-1, SHA-256, SHA-384, SHA-512 다양한 해시 알고리즘 지원

해시 알고리즘 선택
MD5
128 비트
SHA-1
160 비트
SHA-256
256 비트
SHA-384
384 비트
SHA-512
512 비트

해시란?

해시(Hash)는 임의 길이의 데이터를 고정 길이의 다이제스트로 매핑하는 알고리즘입니다. 동일한 입력은 항상 동일한 출력을 생성하며, 미세한 입력 변화는 완전히 다른 출력을 초래하고, 해시 값에서 원본 데이터를 역추적할 수 없습니다. 대표적인 해시 알고리즘으로 MD5, SHA-1, SHA-256, SHA-384, SHA-512 등이 있으며, 데이터 무결성 검증, 비밀번호 저장, 디지털 서명 등 다양한 시나리오에서 널리 사용됩니다.

사용 방법

사용 방법

  1. 입력 모드 선택: 텍스트 입력 또는 파일 업로드
  2. 텍스트를 입력하거나 파일을 드래그 앤 드롭합니다
  3. 생성할 해시 알고리즘을 선택합니다 (복수 선택 가능)
  4. '해시 생성' 버튼을 클릭하여 계산합니다
  5. '복사'로 개별 해시를 복사하거나 '전체 복사'로 전체 결과를 복사합니다

해시 관련 참고사항

  • 해시 값은 결정론적 지문입니다. 입력에서 1바이트만 변경해도 다른 결과가 생성됩니다.
  • 보안이 중요한 경우 SHA-256 이상의 알고리즘을 사용하여 무결성을 확인하고, 새로운 보안 워크플로에는 MD5/SHA-1을 피하세요.

활용 사례

여러 알고리즘으로 텍스트 또는 파일 해시 생성텍스트와 파일 입력 간 전환, MD5(128비트), SHA-1(160비트), SHA-256(256비트), SHA-384(384비트), SHA-512(512비트) 선택이 가능하며 필요한 다이제스트만 생성합니다. 텍스트 모드는 JavaScript 구현으로 UTF-8 입력을 해시하고, 파일 모드는 Web Crypto의 SubtleCrypto.digest로 스트리밍 SHA-2 결과를 생성하며, 입력은 로컬 기기를 벗어나지 않습니다.
생성된 해시를 클립보드 내용과 비교결과의 비교 액션으로 현재 클립보드 값이 해당 다이제스트와 일치하는지 확인할 수 있습니다. 복사된 체크섬이나 API 예시를 검증할 때 편리합니다. 비교는 hex 대소문자를 정규화하므로 대문자 발행자 다이제스트와 소문자 생성 다이제스트도 일치하지만, 알고리즘 식별자는 일치해야 합니다(SHA-256 출력은 64자 hex, SHA-512는 128자).
작업에 맞는 알고리즘 선택MD5와 SHA-1은 레거시 호환성과 빠른 지문에만 사용하세요(둘 다 알려진 충돌 공격이 있어 디지털 서명에 부적합). 해시가 변조 탐지를 목적으로 한다면 SHA-256 이상을 선호하세요. SHA-512는 64비트 워드 크기 덕분에 64비트 CPU에서 가장 빠르게 실행되므로 서버급 하드웨어에서 선호할 이유가 됩니다.
다운로드한 파일의 체크섬을 공개된 다이제스트와 검증파일 모드로 전환하고 다운로드한 파일의 SHA-256(또는 SHA-512)을 계산한 뒤, 발행자가 공개한 체크섬을 비교 필드에 붙여넣어 설치·배포 전 바이트 단위 무결성을 확인하세요. 불완전한 다운로드나 중단된 전송은 다른 다이제스트를 생성하며, 이것이 이 워크플로우가 잡아내는 불일치입니다.
인코딩 경계를 넘어 동일 다이제스트 재현UTF-8과 원시 바이트를 전환하여 같은 문자열을 다시 해시하면 소스 인코딩, BOM, 줄 바꿈이 시스템 간에 다를 때 같은 논리 텍스트가 왜 다른 MD5 또는 SHA-1 값을 내는지 확인할 수 있습니다. 문자열 시작에 UTF-8 BOM(0xEF 0xBB 0xBF)이 있으면 보이는 문자가 동일해도 다이제스트가 바뀝니다. 체크섬 불일치가 발생하기 전에 이를 잡아낼 수 있습니다.

기술 원리

암호학적 해시 함수는 임의 길이의 입력을 고정 길이의 다이제스트로 매핑하며, 세 가지 보안 속성을 가집니다: 전 이미지 저항(역변환하기 어려움), 제2 전 이미지 저항(같은 다이제스트를 가진 다른 입력을 찾기 어려움), 충돌 저항(같은 다이제스트를 가진 두 입력을 찾기 어려움). MD5(Rivest 1991, RFC 1321), SHA-1(NIST FIPS 180-1, 1995), SHA-2 계열(FIPS 180-4, 2012)은 모두 Merkle-Damgård 구조입니다: 입력은 블록 크기의 배수로 패딩된 뒤 단방향 압축 함수를 통해 반복됩니다. 블록 크기는 MD5, SHA-1, SHA-256에서 512비트, SHA-512에서 1024비트입니다. 다이제스트 크기는 각각 128/160/256/384/512비트입니다. MD5(Rivest 1991)는 128비트 해시로, 네 개의 32비트 체인 워드(A, B, C, D)로 이루어진 64라운드 쿼터 라운드이며, 상수는 사인 함수에서 파생됩니다(보안적 의미 없음, 단순히 대칭을 깨기 위함). 충돌 공격: Wang 등 2004년에 MD5 충돌 탐색을 2^40 해시 연산으로 감소(수동 계산 차분 경로); Stevens 2009년에 선택 접두사 충돌 도구를 작성; Flame 악성코드 2012년에 새로운 선택 접두사 공격으로 Microsoft 코드 서명 인증서를 위조하여 최초의 공개 알려진 실환경 MD5 충돌 익스플로잇이 됨. 현재 MD5 충돌은 CPU에서는 1달러 미만, GPU에서는 밀리초 단위로 생성됩니다. 새로운 프로토콜에는 SHA-256을 사용하세요. SHA-1(FIPS 180-1, 2011년 FIPS 180-4 이후 NIST에 의해 폐기)은 160비트 해시로, 80라운드와 다섯 개의 32비트 체인 워드를 사용합니다. SHAttered 공격(Stevens 등, 2017년 2월)은 최초의 실용적 SHA-1 충돌을 생성했으며, 약 6,500 CPU년과 110 GPU년이 소요되었습니다. 2020년까지 선택 접두사 충돌은 약 45,000달러의 GPU 시간으로 실용화되었고, 2025년까지 상용 하드웨어에서의 충돌 비용은 10,000달러 미만입니다. Git은 2020년에 SHA-1에서 SHA-256으로 마이그레이션했으며, HTTPS 인증서는 2017년부터 SHA-1 사용이 금지되었습니다. SHA-2(FIPS 180-4, 2012)는 여섯 가지 해시를 다룹니다: SHA-1의 후속 SHA-224, SHA-256, SHA-384, SHA-512와 두 가지 절단 변형인 SHA-512/256, SHA-512/224. 내부적으로 SHA-256은 6개의 논리 함수(Ch, Maj, Σ0, Σ1, σ0, σ1)와 64개의 라운드 상수 K[t] = ⌊∛(t번째 소수의 소수 부분 첫 32비트)⌋를 사용합니다 — 소수-입방근 구조는 순수하게 미학적이며 보안 역할이 없습니다. SHA-256은 약 2010년부터 주력으로 TLS 1.3(RFC 8446), Bitcoin의 작업 증명(2025년 전환 논의까지), 대부분의 콘텐츠 주소 지정 저장소의 사실상 표준입니다. SHA-512/256은 64비트 워드를 사용하고 SHA-512의 압축을 실행한 뒤 절단하므로 64비트 하드웨어에서 더 빠릅니다. SHA-3(FIPS 202, 2014)와 Keccak(원본 제출)은 근본적으로 다른 구조를 사용합니다: 1600비트 상태를 가진 Keccak-f[1600] 스폰지 구조로, 흡수/압착 단계를 교대로 실행합니다. SHA-3는 SHA-2와 동일한 다이제스트 크기를 가지지만 Merkle-Damgård 해시에 영향을 미치는 길이 확장 공격에 저항합니다 — 비밀 접두사 MAC을 해싱할 때 유용한 속성입니다. BLAKE2(RFC 7693)는 소프트웨어에서 SHA-256보다 빠르며 WireGuard, Argon2 및 여러 최신 프로토콜이 사용합니다. 이 페이지는 SubtleCrypto.digest(플랫폼 네이티브 코드를 호출 — Chromium의 OpenSSL/BoringSSL, Firefox의 NSS, Safari의 등가)를 통해 브라우저에서 SHA-1, SHA-256, SHA-384, SHA-512를 실행하고, SubtleCrypto가 MD5를 노출하지 않으므로(W3C Web Crypto API 기준 MD5는 'recommend-only' 상태) 순수 JS MD5 구현으로 대체합니다. 10MB 파일의 경우 V8의 SHA-256은 최신 노트북에서 약 400MB/s로 실행되고, 순수 JS MD5는 약 100~150MB/s로 실행됩니다 — Web Crypto SHA 계열이 순수 JS 구현보다 3~4배 빠르므로 페이지가 SHA-1 이상을 네이티브 인터페이스로 라우팅하는 이유입니다.

  • MD5(Rivest 1991, RFC 1321): 128비트 다이제스트, 512비트 블록, 64라운드, Merkle-Damgård. Wang 2004(2^40 작업량) 이후 충돌 취약, 2012년 Flame에서 선택 접두사 취약 — 새 코드에 사용하지 말 것. 비보안 체크섬, ETags, 콘텐츠 지문, 캐시 키에는 여전히 적합.
  • SHA-1(FIPS 180-1, 1995; 2011년 FIPS 180-4에서 폐기): 160비트 다이제스트. SHAttered 충돌(Stevens 등, 2017년 2월)에 약 6,500CPU년 소요; 현재 선택 접두사 충돌은 10,000달러 미만. Git은 2020년 SHA-256으로 마이그레이션; CA/Browser Forum은 2017년 HTTPS 인증서에서 SHA-1 금지.
  • SHA-256(FIPS 180-4): 256비트 다이제스트, Ch/Maj/Σ0/Σ1/σ0/σ1의 64라운드, ∛(소수) 소수 부분에서 파생된 64개 라운드 상수 K[t]. TLS 1.3(RFC 8446), 대부분의 콘텐츠 주소 지정 저장소, Bitcoin 마이닝의 주력. 256비트 보안 수준은 약 128비트 충돌 저항 제공.
  • SHA-384/SHA-512(FIPS 180-4): SHA-512는 64비트 워드, 80라운드, 1024비트 블록. 64비트 하드웨어에서 SHA-256보다 약 1.5~2배 빠름. SHA-384는 SHA-512를 384비트로 절단; SHA-512/256은 SHA-512를 256비트로 절단하여 SHA-256보다 우수한 길이 확장 저항 제공.
  • SHA-3(FIPS 202, 2014) / Keccak: Keccak-f[1600] 퍼뮤테이션을 사용하는 스폰지 구조, SHA3-256/384/512의 비트레이트 1088/832/576. Merkle-Damgård 해시에 영향을 미치는 길이 확장 공격에 저항 — 비밀 접두사 MAC에 유용.
  • BLAKE2(RFC 7693)와 BLAKE3는 최신 고속 해시; BLAKE2s는 일반적인 MAC 키 유도에, BLAKE2b는 WireGuard와 여러 프로토콜에서 사용, BLAKE3는 병렬 해싱을 위한 Merkle 트리 추가. 2025년 기준 Web Crypto에 없으므로 이 페이지에서는 노출하지 않음.
  • Web Crypto API(W3C): SubtleCrypto.digest('SHA-256', data)는 플랫폼 네이티브 코드로 계산된 Promise<ArrayBuffer>를 반환. V8의 SHA-256은 약 400MB/s, 순수 JS MD5는 약 100~150MB/s — 3~4배 격차가 페이지가 SHA-1 이상을 SubtleCrypto로 라우팅하는 이유.
  • 길이 확장 주의사항: H(secret || message)는 공격자가 다이제스트와 메시지 길이를 알면 모든 Merkle-Damgård 해시(MD5, SHA-1, SHA-2)에서 위조 가능. HMAC(RFC 2104)과 SHA-3는 이를 방지. MAC에는 HMAC-SHA-256 또는 KMAC 사용; 신뢰할 수 없는 입력의 해시에는 원시 다이제스트로 충분.

예시

FIPS 180-2 테스트 벡터: 빈 문자열과 'abc'

입력:   '' (빈 문자열, 0 bytes)
MD5:     d41d8cd98f00b204e9800998ecf8427e   (32 hex chars)
SHA-1:   da39a3ee5e6b4b0d3255bfef95601890afd80709   (40 hex chars)
SHA-256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855   (64 hex chars)
SHA-512: cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e

입력:   'abc' (3 bytes, FIPS 표준 테스트 벡터)
MD5:     900150983cd24fb0d6963f7d28e17f72
SHA-1:   a9993e364706816aba3e25717850c26c9cd0d89d
SHA-256: ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
SHA-512: ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f

각 출력 길이는 알고리즘에 의해 고정됩니다 (MD5 128 bit, SHA-1 160 bit,
SHA-256 256 bit, SHA-512 512 bit). 입력 길이와는 무관합니다.

FIPS 180-2 56바이트 테스트 벡터 (멀티 블록)

입력:   'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq' (56 bytes)

SHA-256: 248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1
SHA-512: 8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018
         50d1c9ef3504cabb287a00833cf81a7e (128 hex chars - 앞 64자만 표시,
         전체 다이제스트는 64 bytes / 1024 bits)

이 56바이트 벡터는 두 개의 512비트 SHA-256 블록에 걸쳐 있으며,
메시지 스케줄(워드 16..63의 sigma_0 / sigma_1 확장)을 점검합니다.
SHA-256의 NIST CAVP 기준 입력값으로, 메시지 스케줄 루프가
올바르게 구현되었는지 확인하는 표준 방법입니다.
결과가 일치하면 블록 패딩, 길이 추가, 최종 상태 합산이
모두 정상 동작 중입니다. SHA-512는 동일한 Merkle-Damgard 구조를
64비트 워드와 80단계 스케줄로 적용하므로, 같은 56바이트 입력으로
128자 hex 다이제스트가 생성됩니다.

쇄도 효과(avalanche)와 인코딩 함정

입력:   '' (빈 문자열)    MD5: d41d8cd98f00b204e9800998ecf8427e
입력:   'a' (한 바이트)   MD5: 0cc175b9c0f1b6a831c399e269772661

단 한 바이트만 추가해도 모든 출력 비트가 변하는 것이 쇄도 효과입니다.
대소문자(a -> A는 0x61에서 0x41로, 0x20 위치의 한 비트만 차이),
뒤따르는 공백 문자에서도 동일한 결과가 나타납니다. 같은 텍스트라도
끝의 '\n' 유무나 UTF-8 BOM(0xEF 0xBB 0xBF) 포함 여부에 따라
다이제스트가 달라지므로, 게시된 체크섬과 일치시키려면 보이는 문자가
아니라 정확한 바이트 시퀀스가 일치해야 합니다. 브라우저와 Node는
결정적 입력 바이트를 만들기 위해 문자열을 먼저 TextEncoder로 처리합니다.
문자열을 직접 받는 JS MD5 구현은 비-ASCII 입력에서 잘못된 해시를 만듭니다.

sha256sum으로 파일 무결성 검증

$ sha256sum ubuntu-24.04-desktop-amd64.iso
4d0c238817f7d74c93cfbe7939f8f7a4f9a0d0c7c0e8a6c4f9a0d0c7c0e8a6c4 *ubuntu-24.04-desktop-amd64.iso

1. 같은 .iso 파일을 이 페이지의 파일 모드에 끌어다 놓고 SHA-256을 선택.
2. 64자 다이제스트를 비교 필드에 복사.
3. 다이제스트가 일치하면 다운로드 파일이 배포자의 원본과 바이트 단위로 동일.
   불일치하면 파일이 손상되었거나, 일부만 다운로드되었거나,
   매니페스트에 명시된 버전과 다른 버전임을 의미합니다.

동일한 파일에서 MD5와 SHA-1은 각각 32자, 40자 다이제스트를 생성하고,
SHA-256과 SHA-512는 64자, 128자를 생성합니다. 비교 전 배포자가 사용한
알고리즘이 같은지 반드시 확인하세요.

자주 묻는 질문

이 도구는 어떤 알고리즘을 지원하나요?

보통 MD5, SHA-1, SHA-256, SHA-384, SHA-512를 지원하며 SHA-3나 RIPEMD-160을 함께 제공하는 경우도 있습니다. 오늘날 표준은 SHA-256이며, MD5와 SHA-1은 보안과 무관한 체크섬 용도로만 사용해야 합니다.

해싱은 암호화와 같은 건가요?

아니요. 해싱은 일방향이라 해시만 가지고는 원래 입력을 복원할 알고리즘이 없습니다(작은 입력 공간에 대한 무차별 대입은 예외). 암호화는 키만 있으면 가역적으로 복호화할 수 있습니다. 지문이나 무결성 검증에는 해싱을, 기밀성 보호에는 암호화를 사용하세요.

입력 값은 어디에서 해싱되나요?

모든 해싱은 Web Crypto API 또는 순수 JS 구현을 통해 브라우저에서 실행됩니다. 어떤 데이터도 서버로 전송되지 않습니다. 입력을 붙여 넣는 동안 네트워크 탭을 확인하면 직접 검증할 수 있습니다.

같은 입력인데 다른 사이트와 결과가 다른 이유가 무엇인가요?

보통 입력 전처리 차이 때문입니다. 줄바꿈(CRLF vs LF), 끝부분 공백, 문자 인코딩(UTF-8 vs UTF-16), 또는 자동으로 줄바꿈을 덧붙이는 도구 등이 원인이 됩니다. 해시 알고리즘 자체는 어떤 구현에서도 동일한 결과를 냅니다.

해시를 거꾸로 풀 수 있나요?

수학적으로는 불가능합니다. 다만 자주 쓰는 비밀번호, 사전 단어, 짧은 숫자처럼 작은 집합에서 나온 짧은 입력은 미리 계산된 레인보우 테이블로 조회될 수 있습니다. 민감한 데이터에는 솔트와 함께 bcrypt나 Argon2 같은 느린 해시를 사용해야 하며, 이 도구로 그런 용도를 대체할 수는 없습니다.

이 도구로 비밀번호를 해싱해도 되나요?

안 됩니다. SHA-256만으로는 비밀번호 저장에 너무 빠릅니다. 사용자별 솔트와 적절히 조정한 작업 계수를 적용한 bcrypt, scrypt, Argon2를 사용하세요. SHA 계열 해시는 파일 무결성, 콘텐츠 주소화, 서명 입력 용도로 적합하며 비밀번호용은 아닙니다.

해시 길이가 알고리즘마다 다른 이유가 무엇인가요?

각 알고리즘은 고정된 다이제스트 크기를 갖습니다. MD5는 128비트(16진수 32자), SHA-1은 160비트(40자), SHA-256은 256비트(64자), SHA-512는 512비트(128자)입니다. 길이가 길수록 충돌 저항성이 높지만 저장 공간도 더 많이 차지합니다.