개발자 도구

해시 생성기 및 체크섬

텍스트와 파일에 대한 MD5, SHA-1, SHA-256, SHA-384 및 SHA-512를 한 번에 가져오세요. 다운로드한 파일을 공식 체크섬과 비교하여 변조되지 않았는지 확인할 수 있습니다. 모든 작업은 로컬에서 이루어지며 브라우저 밖으로 나가지 않습니다.

동시 5개 알고리즘 텍스트 + 파일 체크섬 로컬, 제로 업로드 즉각적인 결과
문자 UTF-8 바이트

기능

한 페이지에서 5개의 모든 해시

빠른 지문부터 안전한 서명까지 — 개발자, 운영 및 다운로드 검증에 필요한 모든 해시를 제공합니다.

01

5개의 알고리즘

출력 비트 길이와 함께 MD5, SHA-1, SHA-256, SHA-384 및 SHA-512를 함께 표시 — 더 이상 도구를 전환할 필요가 없습니다.

02

실시간 계산

입력하는 즉시 텍스트 해시가 생성되고 버튼을 누를 필요가 없습니다. 결과는 고정폭 글꼴로 표시되며 행을 클릭하여 복사할 수 있습니다.

03

파일 무결성 검사

설치 프로그램, 디스크 이미지 또는 아카이브를 끌어놓고 공식 체크섬과 비교하여 변조되지 않은 다운로드임을 확인하세요.

04

로컬, 제로 업로드

SHA 계열은 브라우저에 내장된 Web Crypto API를 사용합니다. 텍스트와 파일이 기계 밖으로 나가지 않으므로 민감한 콘텐츠도 안전합니다.

05

UTF-8 일관성

텍스트는 UTF-8 바이트로 해시 처리되므로, 결과는 md5sum, PHP md5(), Python hashlib과 정확히 일치합니다.

06

원 클릭 복사

각 해시를 개별적으로 복사하거나, 터미널에 붙여넣을 수 있는 표준 체크섬 형식으로 전체 해시를 복사합니다.

해시에 대해 알아야 할 사항

개념은 간단하지만, 잘못된 작업에 잘못된 해시를 사용하는 것은 실제 보안상의 실수입니다.

MD5와 SHA-1은 정확히 무엇인가요?

MD5(Message-Digest Algorithm 5)는 MIT의 Ronald Rivest가 설계하여 1992년에 RFC 1321로 발표되었으며, MD4의 후속으로 고정 길이 128비트(16진수 32자리) 다이제스트를 생성합니다. SHA-1은 미국 국가안보국(NSA)이 설계하여 1995년에 연방 표준 FIPS 180-1로 발표되었으며, 160비트를 생성합니다. 두 알고리즘은 이후 20년 동안 가장 널리 사용되는 해시 알고리즘이 되었으며, 파일 체크섬, 비밀번호 저장, 디지털 서명, Git 커밋 ID 등에 사용됩니다. 현재도 올바른 다이제스트를 생성한다는 점에 유의하세요. "안전하지 않음"은 충돌 저항성이 깨졌다는 의미이며, 출력이 틀리다는 의미는 아닙니다.

해싱, 암호화, 인코딩은 같은 것인가요?

아니요, 각기 다른 문제를 해결합니다. Base64나 URL 인코딩과 같은 인코딩은 아무나 되돌릴 수 있는 가역적인 형식 변환으로, 보안 기능이 없습니다. 암호화는 키를 사용해 가역적입니다. 평문이 암호문이 되고 올바른 키로 복호화할 수 있습니다. 해싱은 일방향이며 키가 없고 다이제스트에서 원본을 복구할 수 없습니다. 지문, 무결성 검사, 서명 등에 사용됩니다. 흔한 오해는 Base64를 "암호화"로 착각하거나 비밀번호를 "MD5로 암호화했다"고 말하는 것입니다. 그것은 해싱이며, 게다가 비밀번호를 안전하지 않게 저장하는 방식입니다.

해시를 원본으로 되돌릴 수 없는 이유는 무엇인가요?

해시는 일방향 함수입니다. 임의 길이의 입력이 고정 길이의 다이제스트로 압축되면서 대부분의 정보가 접힙니다. 단어 수로 문장을 재구성할 수 없는 것과 같이, 다이제스트에서 원본을 유도할 수 없습니다. 안전한 알고리즘은 특히 이러한 되돌리기가 계산적으로 불가능하도록 설계되었습니다.

MD5와 SHA-1은 여전히 사용 가능한가요?

파일이 전송 중에 우발적으로 손상되었는지 확인하는 용도로는 사용 가능합니다. 예, 임의의 바이트 변경은 사실상 항상 MD5를 변경합니다. 하지만 보안 목적으로는 절대 사용하지 마세요. 두 알고리즘 모두 실용적인 충돌 공격이 존재합니다. 연구자는 제어 하에 있는 두 개의 서로 다른 파일이 동일한 MD5를 가지도록 제작할 수 있습니다. 비밀번호, 서명, 인증서에는 SHA-256 이상을 사용하세요.

같은 텍스트에 대해 제 해시가 다른 도구와 다른 이유는 무엇인가요?

일반적인 이유는 세 가지입니다. ① 다른 문자 인코딩 (이 도구는 항상 UTF-8을 사용하며, 구버전 도구는 GBK나 Latin-1을 사용할 수 있습니다); ② 후행 줄바꿈 - 명령줄 echo는 기본적으로 하나를 추가합니다. (echo -n을 사용하세요); ③ 복사 시 발생하는 공백이나 보이지 않는 문자입니다. 해시는 바이트 하나하나에 민감하므로, 바이트 하나가 틀려도 결과가 완전히 달라집니다.

비밀번호를 일반 MD5/SHA-256으로 저장할 수 없는 이유는 무엇인가요?

일반 해시는 빠릅니다. 유출된 해시 테이블이 있으면 공격자는 초당 수십억 개의 추측을 시도할 수 있으며, 레인보우 테이블로 일반 비밀번호를 즉시 역조회할 수 있습니다. 비밀번호는 비밀번호마다 고유한 솔트와 함께 의도적으로 느린 메모리 집약적 알고리즘(bcrypt, scrypt, Argon2)을 사용해야 하므로 무차별 대입 공격이 비용이 매우 높아집니다.

다운로드한 파일의 무결성을 어떻게 확인하나요?

공식 사이트에 게시된 체크섬(보통 SHA-256)을 찾아, 다운로드한 파일을 여기 "파일 체크섬" 탭으로 드래그한 다음, 결과 위 상자에 공식 값을 붙여넣으세요. 이 도구는 값의 길이에서 알고리즘을 감지하고, 파일의 바이트가 게시자가 공개한 것과 정확히 일치하면 일치하는 행을 녹색으로 표시합니다. 빨간색은 손상이나 중간자 공격을 의미합니다 — 이 파일은 실행하지 마세요.

다섯 가지 알고리즘 중 어떤 것을 사용할까요

시나리오에 따라 선택하세요. 최신 알고리즘은 더 긴 다이제스트를 생성하고 공격에 더 잘 견디며 계산하는 데 약간 더 많은 비용이 듭니다.

알고리즘 도입 출력 길이 보안성 일반적인 사용
MD5 1992 128비트 (32자) 깨짐; 충돌이 실용적 비보안 지문, 중복 제거, 레거시 호환성
SHA-1 1995 160비트 (40자) 2017년부터 충돌이 실용적 Git 히스토리 ID 및 기타 레거시 시스템; 새로운 보안 용도에는 사용하지 마세요
SHA-256 2001 256비트 (64자) 현재 안전함 파일 체크섬, 서명, TLS 인증서, 블록체인 — 표준 기본값
SHA-384 2001 384비트 (96자) 안전함 384비트를 요구하는 규정 준수 체계를 위한 축약 SHA-512
SHA-512 2001 512비트 (128자) 안전함 고도로 신뢰할 수 있는 서명; 64비트 CPU에서 종종 SHA-256보다 빠름

"안전함"은 지금까지 실용적인 공개 충돌 공격이 없다는 의미입니다. 비밀번호 저장에는 해시 선택과 관계없이 bcrypt/Argon2를 사용하세요.

체크섬: 다운로드한 파일을 실제로 검증하는 방법

다운로드 페이지에 있는 MD5 또는 SHA-256 문자열의 용도, 비교 방법, 비교 대상까지 한 섹션에서 모두 확인하세요.

그렇다면 왜 검증해야 할까요

디스크에 있는 파일이 반드시 서버에 있는 파일과 같지는 않습니다. 10초짜리 체크섬 비교는 세 가지 종류의 문제를 막아줍니다:

전송 중 손상

재개 가능한 다운로드와 불안정한 네트워크에서 큰 파일은 예상외로 잡다한 바이트가 끼는 경우가 많습니다. 깨진 설치 프로그램의 문제를 해결하는 데는 10초보다 훨씬 오래 걸립니다.

동기화가 안 맞는 미러

많은 다운로드가 실제로 미러나 CDN에서 이루어지는데, 동기화 지연이나 캐시 오류로 구버전 릴리스나 파일 일부만 받을 수도 있습니다.

고의적 변조

다운로드 출처가 해킹당하거나 공공 네트워크가 도청당하면 파일에 백도어가 심어질 수 있습니다. 2016년 Linux Mint 사이트가 해킹당해 다운로드 링크가 백도어가 심어진 ISO로 교체되었는데, 이 프로젝트의 첫 번째 대응 방안은 모든 사람에게 체크섬을 확인할 것을 촉구하는 것이었습니다.

체크섬이란 무엇인가요

배포자가 서버에서 파일의 해시를 계산하여 다운로드 페이지에 결과를 게시하면, 다운로드 후 로컬에서 다시 해시를 계산합니다. 두 문자열이 완전히 일치하면 해당 파일의 바이트가 배포자가 배포한 것과 정확히 일치하며 손상이나 변조가 없음을 의미합니다. 이 검사는 각 바이트에 민감하여 단 한 바이트만 변경되더라도 값이 완전히 달라집니다. 일반적으로 CRC32 같은 단순 방식도 체크섬에 포함되며, 이는 우발적 손상을 감지하는 반면 MD5/SHA 같은 암호학적 해시는 의도적 위조에 대응합니다.

3단계로 파일 인증하기

  1. 1
    공식 체크섬 가져오기

    다운로드 페이지에서 게시된 MD5/SHA-256 값을 찾습니다 (종종 "checksum"으로 표시되거나 .sha256 동반 파일로 제공되며) 전체 문자열을 복사합니다.

  2. 2
    파일 드롭 및 붙여넣기

    위에 있는 "파일 체크섬" 탭으로 전환한 후 다운로드한 파일을 드롭하고, 결과 위 상자에 체크섬을 붙여넣습니다.

  3. 3
    색상으로 판정 읽기

    해당 도구는 값의 길이로 알고리즘을 감지합니다: 녹색은 파일이 공식 배포본과 완전히 일치하며 사용해도 안전함을 의미하고, 빨간색은 손상되거나 변조되었을 수 있어 실행해서는 안 됨을 의미합니다.

공식 사이트의 체크섬 읽기

다운로드 페이지에는 다양한 형식으로 체크섬이 작성되지만, 모두 해시 값과 파일 이름이라는 두 요소로 구성됩니다. 다음 세 가지 형식이 가장 흔하며, 붙여넣을 때는 해시 부분만 가져오시면 됩니다 (이 도구는 자동으로 공백과 줄 바꿈을 무시합니다):

# 1. 단일 줄: 값만 있음
a0570aa01532917be820a37994710cf09b6eba198bf9543c27be938c5f09e60a

# 2. sha256sum 형식: 값 + 두 개의 공백 + 파일 이름 (SHA256SUMS 매니페스트는 이러한 줄이 여러 개인 것입니다)
a0570aa01532917be820a37994710cf09b6eba198bf9543c27be938c5f09e60a  ubuntu-24.04.iso

# 3. BSD 형식: 알고리즘 (파일 이름) = 값
SHA256 (ubuntu-24.04.iso) = a0570aa01532917be820a37994710cf09b6eba198bf9543c27be938c5f09e60a

MD5 또는 SHA-256

공식 사이트에서 제공하는 것을 인증하십시오. 선택할 수 있다면 다음을 참고하십시오: MD5는 전송 중 우발적 손상에 대해 완전히 충분합니다 (임의 변경은 거의 항상 MD5를 변경시킵니다). 의도적 변조가 우려되는 경우 — 보안 소프트웨어, 인증서, 서명된 패키지 등 — SHA-256 이상이 필요합니다. 실제 충돌 공격으로 공격자가 동일한 MD5를 가진 서로 다른 두 파일을 만들 수 있기 때문입니다. 이 내용은 아래 "보안 역사"에서 설명합니다.

명령줄로 인증하기

Linux와 macOS에서는 체크섬 도구에 -c 옵션을 사용하면 전체 매니페스트를 자동으로 인증할 수 있어 수동 비교가 필요 없습니다. Windows의 기본 제공 명령은 값만 계산하므로 공식 문자열과 직접 비교해야 합니다.

환경 인증 명령
Linux sha256sum -c SHA256SUMS (매니페스트에 나열된 모든 파일을 확인합니다)
macOS shasum -a 256 -c checksum.txt
간단한 단일 값 확인 echo "공식값 파일이름" | sha256sum -c - (성공시 OK를 출력합니다)
Windows Get-FileHash <파일> -Algorithm SHA256로 계산한 후 공식 값과 비교하십시오

간략한 보안 역사: MD5가 깨진 과정

MD5가 하룻밤 사이에 실패한 것은 아닙니다. 학계에서 첫 번째 균열이 발생한 후 실제 환경에서 위조 인증서가 등장하기까지 20년이 걸렸습니다.

  1. 1992

    MD5가 공개됨

    Ronald Rivest가 RFC 1321에서 MD5를 발표했습니다. 빠르고 구현이 쉬우며 항상 128비트 다이제스트를 생성하는 MD5는 파일 체크섬과 비밀번호 저장의 사실상 표준으로 빠르게 자리 잡았으며 암호학적으로 안전하다고 여겨졌습니다.

  2. 2004

    왕샤오윈(Wang Xiaoyun) 팀이 MD5 충돌을 공개하다

    CRYPTO 2004에서 중국 수학자 왕샤오윈이 이끄는 팀이 MD5에 대한 전체 충돌 공격을 시연했습니다. 서로 다른 내용의 두 파일이 동일한 해시를 갖도록 구성한 것입니다(초기에는 IBM P690 슈퍼컴퓨터로 약 1시간이 걸렸으나, 후속 개선으로 일반 하드웨어에서 초 단위로 단축되었습니다). MD5가 약속한 충돌 저항성은 사라졌고, 이어진 기립 박수는 암호학 역사상 가장 유명한 순간 중 하나가 되었습니다.

  3. 2008

    변조된 인증서가 실제 인터넷에 발생하다

    Marc Stevens, Alexander Sotirov 등이 선택 접두사 충돌을 이용해 브라우저에서 신뢰하는 중간 CA 인증서를 변조했습니다: 서로 다른 접두사를 가진 인증서가 동일한 서명을 가지는 것입니다. 이제 공격자는 어떤 가짜 사이트에 대해서도 '유효한' HTTPS 인증서를 발급할 수 있게 되었습니다. 인증 기관들은 얼마 지나지 않아 MD5 인증서 발급을 중단했습니다.

  4. 2012

    MD5를 통한 Flame 악성코드가 Windows를 공격하다

    국가가 후원하는 Flame 악성코드는 MD5 충돌을 이용해 Microsoft 터미널 서버 라이선스 기관이 변조된 코드 서명 인증서를 서명하도록 했고, 이를 통해 Microsoft가 서명한 업데이트로 위장해 중동 전역에 확산되었습니다. 이는 MD5 충돌을 이용한 첫 실제 공격이었습니다. Microsoft는 긴급 패치를 통해 해당 인증서를 취소했습니다.

  5. 2017

    SHAttered: SHA-1이 무너지다

    Google과 네덜란드 CWI 연구소(Marc Stevens 등)는 동일한 SHA-1 해시를 가진 두 개의 서로 다른 PDF 파일을 약 6,500 CPU년과 110 GPU년의 비용으로 발표했습니다. 얼마 지나지 않아 브라우저가 SHA-1 인증서에 대한 신뢰를 제거했고 Git 플랫폼은 SHA-1에서 벗어나는 전환을 가속화했습니다. 160비트 시대는 끝났습니다.

중요한 미묘한 점: 충돌 공격은 기존 파일의 해시를 '크래킹'하지 않습니다. 같은 값으로 해싱되는 특정 두 개의 파일을 구성할 뿐입니다. 하지만 서명과 인증서의 경우, 그것만으로도 치명적인 변조가 가능합니다.

명령줄에서의 해싱

브라우저를 사용하기 불편할 때, 모든 운영체제는 기본 명령을 제공합니다(SHA-256 표시).

환경 명령
Linux / macOS sha256sum 파일명 (macOS의 경우: shasum -a 256 파일명)
Windows PowerShell Get-FileHash 파일명 -Algorithm SHA256
Windows CMD certutil -hashfile 파일명 SHA256

코드에서의 해싱

스크립트를 작성하거나 API를 통합할 때 널리 사용되는 4가지 언어의 최소 예제입니다.

JavaScript
async function sha256Hex(data) {
  const bytes = typeof data === "string"
    ? new TextEncoder().encode(data)
    : new Uint8Array(data);
  const digest = await crypto.subtle.digest("SHA-256", bytes);
  return [...new Uint8Array(digest)]
    .map((b) => b.toString(16).padStart(2, "0"))
    .join("");
}

// Text
console.log(await sha256Hex("hello"));

// Files: digest accepts an ArrayBuffer directly
const buf = await file.arrayBuffer();
console.log(await sha256Hex(buf));

브라우저의 기본 Web Crypto는 SHA 계열만 지원하며 HTTPS 또는 localhost가 필요합니다. MD5는 제3자 라이브러리가 필요합니다.

PHP
echo hash('sha256', 'hello');        // 64 hex characters
echo md5('hello');                   // same as hash('md5', 'hello')

// Streamed: hashes the file without loading it into memory
echo hash_file('sha256', 'setup.exe');

hash()와 hash_file()은 md5, sha1, sha256, sha512 등을 지원합니다. 파일 해싱은 스트리밍되므로 메모리 사용량이 적습니다.

Python
import hashlib

print(hashlib.sha256(b"hello").hexdigest())
print(hashlib.md5(b"hello").hexdigest())

# Large files: streamed, low memory (Python 3.11+)
with open("setup.exe", "rb") as f:
    print(hashlib.file_digest(f, "sha256").hexdigest())

hashlib 표준 라이브러리는 설치가 필요 없습니다. 대용량 파일의 스트리밍 해싱에는 file_digest()를 사용하세요(Python 3.11+).

Rust
use sha2::{Digest, Sha256};
use md5::Md5;

// Text
println!("{:x}", Sha256::digest(b"hello"));
println!("{:x}", Md5::digest(b"hello"));

// Large files: streamed, low memory
let mut file = std::fs::File::open("setup.exe")?;
let mut hasher = Sha256::new();
std::io::copy(&mut file, &mut hasher)?;
println!("{:x}", hasher.finalize());

해싱은 표준 라이브러리에 포함되지 않습니다. Cargo.toml에 RustCrypto sha2와 md-5 크레이트를 추가하세요. std 기능을 활성화하면 io::copy가 파일을 해셔로 스트리밍합니다.

FAQ

내 텍스트와 파일이 업로드되었나요?

아니요. 모든 연산은 브라우저 내에서 이루어집니다: SHA 계열은 내장된 Web Crypto API를 호출하고 MD5는 페이지 JavaScript에서 실행됩니다. 네트워크를 연결하지 않아도 이 도구는 작동합니다 — 중요한 파일으로 직접 시도해 보세요.

빈 텍스트에도 해시가 생성되는 이유는 무엇인가요?

해시 알고리즘은 0바이트에 대해서도 고유한 고정 출력을 정의합니다. 빈 문자열의 MD5는 d41d8cd98f00b204e9800998ecf8427e이고 SHA-256은 e3b0c442로 시작합니다. 이 도구는 입력이 빈 경우 결과를 단순히 숨겨주므로 실수로 복사하지 않도록 해줍니다.

모든 크기의 파일을 해싱할 수 있나요?

브라우저의 사용 가능 메모리에 따라 달라집니다 — 수백 MB의 인스톨러나 디스크 이미지는 일반적으로 문제 없습니다. 파일은 한 번에 모두 메모리로 읽어들이므로, 여러 GB의 파일의 경우 명령줄 도구(sha256sum, certutil)를 사용하는 게 좋습니다.

해시 길이가 다른 이유는 무엇인가요?

길이는 알고리즘에 따라 결정됩니다: MD5는 32개의 16진수 문자, SHA-1은 40개, SHA-256은 64개, SHA-512는 128개입니다. 바이트당 2개의 16진수 문자이며, 길이는 입력 크기와 무관합니다: 1바이트 파일이든 여러 GB 파일이든 SHA-256으로는 모두 64개의 문자가 생성됩니다.

API 서명을 만드는 데 사용할 수 있나요?

네. 많은 오픈 플랫폼은 "매개변수 + 시크릿"을 MD5나 SHA-256으로 해싱하여 요청에 서명합니다. 이 도구는 디버깅 시 서명 값을 확인하기에 아주 좋습니다; 프로덕션 환경에서는 서버 측 언어 라이브러리에서 해시를 계산하고 시크릿을 프론트엔드 코드에 절대 포함시키지 마세요.

이 도구로 체크섬을 어떻게 비교하나요?

"파일 체크섬" 탭으로 전환하고, 파일을 드롭한 후 결과 상단의 입력창에 공식 사이트에서 가져온 체크섬을 붙여넣으세요. 이 도구는 길이로 알고리즘을 자동으로 감지합니다(MD5 32문자, SHA-1 40문자, SHA-256 64문자, SHA-384 96문자, SHA-512 128문자): 일치하는 경우 행이 녹색으로 바뀌고 "통과됨" 표시가 나타나며, 일치하지 않으면 빨간색으로 표시됩니다. 문자의 대소문자, 주변 공백, 줄 바꿈은 자동으로 무시됩니다.

관련 도구

기타 인코딩, 암호화 및 비밀번호 도구입니다.