본문 바로가기
Converter

해시 생성기 (MD5 · SHA-256 · SHA-512)

텍스트를 MD5·SHA 해시로, 다섯 알고리즘을 한 번에

입력은 브라우저에서만 계산되고 서버로 전송되지 않습니다

MD5보안 부적합

계산 중…

SHA-1보안 부적합

계산 중…

SHA-256

계산 중…

SHA-384

계산 중…

SHA-512

계산 중…

보안 부적합 표시된 MD5·SHA-1은 충돌이 발견돼 위변조 방지·전자서명에 쓰면 안 됩니다(단순 체크섬엔 무방). 보안이 필요하면 SHA-256 이상을, 비밀번호에는 소금을 친 bcrypt·Argon2를 쓰세요.

해시는 데이터의 “지문”입니다

해시 함수는 어떤 길이의 데이터든 고정 길이의 짧은 값으로 바꾸는 일방향 함수입니다. 한 글자짜리 문장도, 몇 기가바이트 영화 파일도 SHA-256을 거치면 똑같이 64자리 16진수 하나가 됩니다. 이 값은 원본마다 사실상 고유해서, 데이터의 지문처럼 “이게 그거 맞아?”를 확인하는 데 씁니다.

가장 중요한 성질은 되돌릴 수 없다는 것입니다. 해시값만 보고 원문을 복원하는 것은 원리적으로 불가능합니다(그래서 이 도구도 해시 → 원문은 제공하지 않습니다). 이 점 때문에 해시는 암호화와 자주 혼동되지만 전혀 다릅니다 — 암호화는 열쇠로 되돌리는 것이 목적이고, 해시는 되돌릴 수 없는 것이 목적입니다.

어디에 쓰나

  • 무결성 검사 — 내려받은 파일의 해시가 배포처가 알려 준 값과 같으면, 전송 중 깨지거나 변조되지 않았다는 뜻입니다.
  • 중복 판별 — 두 파일의 해시가 같으면 내용이 같습니다. 이름이 달라도 알아챕니다.
  • 비밀번호 검증 — 원문을 저장하지 않고, 입력한 비밀번호의 해시가 저장된 해시와 같은지만 봅니다(단, 아래의 소금·전용 알고리즘이 필요합니다).

눈사태 효과: 한 글자가 전부를 바꾼다

좋은 해시는 입력의 단 한 비트만 달라져도 출력의 절반가량이 뒤집힙니다. 이것을 눈사태 효과라고 합니다.

hello → SHA-256: 2cf24dba5fb0a30e26e83b2ac5b9e29e...
Hello → SHA-256: 185f8db32271fe25f561a6fc938b2e26...
       └ 대문자 하나 차이인데 결과는 완전히 다르다

그래서 파일이 조금이라도 변조되면 해시가 확연히 달라져 바로 드러납니다. 반대로, 보이지 않는 차이(끝의 공백, Windows의 CRLF vs Unix의 LF 줄바꿈, 전각 공백)도 해시를 완전히 바꿉니다 — 해시는 사람 눈이 아니라 바이트를 보기 때문입니다. 글자마다의 바이트를 확인하려면 아스키코드 변환기가, 줄바꿈·전각 공백을 정리하려면 전각·반각 변환기가 도움이 됩니다.

MD5·SHA-1은 왜 ‘깨졌다’고 하나

좋은 해시는 서로 다른 두 입력이 같은 해시값을 갖는 충돌이 사실상 없어야 합니다. 그런데 MD5는 2004년, SHA-1은 2017년에 서로 다른 내용이 같은 해시를 갖도록 의도적으로 만드는 방법이 공개됐습니다. 이러면 공격자가 가짜 파일을 진짜와 같은 해시로 위장할 수 있어, 전자서명·위변조 방지 같은 보안 용도에서는 위험합니다.

다만 이 도구가 MD5·SHA-1을 함께 내는 이유는, 악의적 공격이 없는 용도(전송 중 깨졌는지 보는 단순 체크섬, 캐시 키, 오래된 시스템과의 호환)에서는 여전히 빠르고 쓸 만하기 때문입니다. 보안이 필요하면 SHA-256 이상을 쓰세요 — 그래서 이 도구는 MD5·SHA-1에 “보안 부적합” 표시를 붙여 둡니다. 다룰 수 있다고 안전하다고 말하지 않습니다.

비밀번호에는 소금을 친다

“비밀번호를 SHA-256으로 해시해서 저장하면 안전하지 않나?”는 흔한 오해입니다. 사람들은 흔한 비밀번호를 쓰기 때문에, 공격자는 미리 계산해 둔 해시 사전(레인보우 테이블)으로 흔한 비밀번호의 해시를 즉시 역추적합니다. 그래서 실제 비밀번호 저장에는 두 가지가 필요합니다.

  • 소금(salt) — 사용자마다 다른 무작위 값을 붙여 해시해서, 같은 비밀번호도 다른 해시가 되게 합니다(사전 공격 무력화).
  • 느린 전용 알고리즘 — bcrypt·scrypt·Argon2처럼 일부러 느리게 설계된 함수를 씁니다. 일반 SHA-256은 너무 빨라서 초당 수십억 번 대입에 오히려 취약합니다.

그래서 이 도구의 해시는 무결성 확인·학습용입니다. 무작위 값 자체가 필요하다면 형제 사이트 TextKit의 비밀번호·UUID 생성기가 암호학적 난수로 만들어 줍니다.

자주 묻는 질문

해시와 암호화는 뭐가 다른가요?
암호화는 되돌릴 수 있고(복호화), 해시는 되돌릴 수 없습니다. 해시는 어떤 길이의 데이터든 고정 길이의 값으로 '뭉개는' 일방향 함수라, 해시값만 보고 원문을 복원하는 것이 불가능합니다. 그래서 해시는 비밀을 숨기는 용도가 아니라 '같은지 확인'하는 용도입니다 — 파일이 변조되지 않았는지(무결성), 두 값이 동일한지, 비밀번호가 맞는지를 원문을 저장하지 않고 검증합니다. 이 도구도 해시 → 원문 복원은 제공하지 않습니다. 원리적으로 불가능하기 때문입니다.
왜 MD5와 SHA-1은 '보안에 쓰지 말라'고 하나요?
충돌(collision)이 발견됐기 때문입니다. 좋은 해시는 서로 다른 두 입력이 같은 해시값을 갖는 일이 사실상 없어야 하는데, MD5는 2004년, SHA-1은 2017년에 서로 다른 내용이 같은 해시를 갖도록 '의도적으로 만드는' 방법이 공개됐습니다. 그래서 위변조 방지·전자서명 같은 보안 용도에서는 공격자가 가짜 파일을 진짜와 같은 해시로 위장할 수 있어 위험합니다. 다만 단순 체크섬(전송 중 깨졌는지)이나 캐시 키처럼 악의적 공격이 없는 용도에는 여전히 빠르고 쓸 만합니다. 보안이 필요하면 SHA-256 이상을 쓰세요.
비밀번호를 그냥 SHA-256으로 해시해서 저장하면 되나요?
안 됩니다. 사용자들은 흔한 비밀번호를 쓰기 때문에, 공격자는 미리 계산해 둔 '해시 사전(레인보우 테이블)'으로 흔한 비밀번호의 해시를 즉시 역추적합니다. 그래서 비밀번호에는 사용자마다 다른 무작위 값(salt, 소금)을 붙여 해시하고, 일부러 느린 전용 알고리즘(bcrypt·scrypt·Argon2)을 씁니다. 일반 SHA-256은 너무 빨라서 대량 대입에 오히려 취약합니다. 이 도구의 해시는 무결성 확인·학습용이며, 실제 비밀번호 저장에는 전용 라이브러리를 쓰세요.
입력을 아주 조금만 바꿔도 해시가 완전히 달라지나요?
네. 이것을 눈사태 효과(avalanche effect)라고 합니다. 좋은 해시는 입력의 단 한 비트만 바뀌어도 출력의 절반가량이 뒤집혀, 원래 값과 아무 관련 없어 보이는 결과가 나옵니다. 위 도구에서 'hello'와 'Hello'를 넣어 비교해 보면 대문자 하나 차이인데도 해시가 완전히 다른 것을 볼 수 있습니다. 이 성질 덕분에 파일이 조금이라도 변조되면 해시가 확연히 달라져 바로 알아챌 수 있습니다.
같은 글자인데 다른 해시가 나올 때가 있어요.
보이지 않는 차이 때문입니다. 끝에 붙은 공백, 줄바꿈(Windows의 CRLF vs Unix의 LF), 눈에 안 보이는 전각 공백, 인코딩 차이가 있으면 해시는 완전히 달라집니다. 해시는 바이트를 그대로 보기 때문에 '사람 눈에 같아 보이는 것'이 아니라 '바이트가 같은 것'만 같은 해시를 냅니다. 파일 해시가 안 맞으면 눈에 안 보이는 문자가 섞였을 수 있으니, 공백·줄바꿈을 먼저 확인하세요.
입력한 내용이 서버로 전송되나요?
아니요. 모든 해시는 브라우저 안에서 계산됩니다. SHA 계열은 브라우저 표준 암호화 기능(Web Crypto)으로, MD5는 이 페이지의 코드로 직접 계산하며, 입력을 어디로도 보내지 않습니다. 민감한 값을 넣어도 네트워크로 나가지 않습니다.