해시 역산기
MD5·SHA·NTLM·RIPEMD 해시를 사전·무차별·마스크로 다중 스레드 복원
범위 표기 지원: a-z, 0-9, 가-힣 (리터럴 하이픈은 \- )
?l 소문자 · ?u 대문자 · ?d 숫자 · ?s 기호 · ?a 모든 ASCII · ?h 16진 · ?1–?4 사용자 집합 · ?? 물음표
솔트 · 반복 (선택)
hash(앞 + 후보 + 뒤) 를 지정 횟수만큼 반복합니다. 예: md5(md5($pw)) → 2회.
잊어버린 자신의 비밀번호·체크섬의 원문을 사전·무차별·마스크로 되찾는 도구입니다. 계산은 여러 스레드로 브라우저 안에서만 실행되며 해시는 어디로도 전송되지 않습니다. 솔트가 적용되었거나 충분히 긴 해시는 찾지 못할 수 있습니다.
탐색 공간이 매우 큽니다
처리 중…
0.0
멈춘 것이 아닙니다. 계산이 끝나면 결과가 표시됩니다.
해시 역산기 소개
이 도구는 잊어버린 본인 소유의 비밀번호나 체크섬을 되찾고, 해시가 왜 취약해지는지 직접 확인해 보기 위한 학습용 도구입니다. 남의 계정이나 데이터의 해시를 되찾는 데 쓰면 법적으로 문제가 될 수 있습니다. 본인 소유, 본인 테스트 데이터, 또는 명시적 허가가 있는 경우에만 쓰세요.
해시는 수학적으로 되돌릴 수 없습니다. 이 도구도 역산을 하지 않습니다. 후보 문자열을 만들어 하나씩 해시한 뒤 목표 해시와 같은 값이 나오는지 비교할 뿐입니다. 그래서 결과는 알고리즘 종류보다 「원문이 후보 안에 들어 있느냐」와 「후보를 몇 개나 만들어야 하느냐」로 정해집니다. 계산은 전부 브라우저 안에서만 실행되고 입력한 해시는 서버로 전송되지 않습니다.
무엇을 되찾을 수 있고 무엇을 못 되찾나
이 도구가 다루는 것은 MD5·SHA-1·SHA-224/256/384/512·MD4·NTLM·RIPEMD-160 같은 「빠른」 해시입니다. 이 계열은 초당 아주 많은 후보를 시험할 수 있어서, 원문이 짧거나 흔하면 금방 찾히고 길고 무작위면 사실상 못 찾습니다. 즉 취약한 것은 알고리즘이 아니라 약한 원문입니다.
반대로 bcrypt·scrypt·Argon2처럼 일부러 느리게 설계된 비밀번호 해싱 함수는 이 도구가 다루지 않습니다. 이런 함수는 하나 계산하는 데 시간을 크게 늘려 두었기 때문에, 후보를 대량으로 시험하는 방식 자체가 성립하지 않습니다. 어떤 서비스가 유출돼도 비밀번호가 잘 안 뚫리는 것은 이렇게 저장했기 때문입니다.
붙여넣은 해시의 길이로 종류를 자동 추정하지만, 32자(MD5·MD4·NTLM)나 40자(SHA-1·RIPEMD-160)는 길이만으로 구분되지 않습니다. 자동 감지는 가장 흔한 것을 우선하고, 정확히 알면 직접 고를 수 있습니다.
왜 GPU 전용 도구보다 느린가
해시 함수는 crypto.subtle의 비동기 API 대신 동기 순수 JS로 자체 구현돼 있습니다. 후보 하나당 함수를 아주 자주 부르기 때문에 호출당 오버헤드가 큰 비동기 방식이 오히려 느리기 때문입니다. 또 CPU 코어 수만큼 워커를 띄워 탐색 공간을 나눠 맡깁니다.
그래도 전용 GPU 도구와는 속도 차이가 큽니다. GPU는 같은 계산을 수천 개 코어로 병렬 처리해 초당 수십억 개를 시험할 수 있습니다. 이 도구의 목적은 최대 속도가 아니라 해시를 밖으로 내보내지 않고 브라우저 안에서 원리를 확인하는 것입니다.
왜 실무에서는 솔트를 붙이는가
이 도구에는 후보 앞뒤에 고정 문자열을 붙이고 결과를 여러 번 다시 해시하는 옵션이 있습니다. 실제 시스템이 그렇게 저장하기 때문에 재현용으로 넣은 것인데, 여기서 솔트의 효과가 드러납니다. 솔트 없는 해시는 미리 계산해 둔 대응표(레인보우 테이블)로 한 번에 조회할 수 있지만, 사용자마다 다른 솔트를 붙이면 그런 표가 무력화됩니다.
게다가 솔트가 사용자마다 다르면 같은 비밀번호를 쓴 두 사람의 해시도 서로 달라집니다. 솔트를 몰라야 하는 건 아니고(대개 해시와 함께 저장됩니다), 목적은 「한 번의 계산으로 여러 계정을 동시에 뚫는」 것을 막는 데 있습니다. 이 도구에서 솔트 값을 알아야만 그 원문을 재현할 수 있다는 점이 이를 보여 줍니다.
결과가 주는 진짜 교훈
흔한 비밀번호일수록, 짧을수록 빨리 찾힙니다. 이것을 뒤집으면 안전한 비밀번호의 조건이 나옵니다. 길고, 사전에 없고, 개인정보(이름·생일·회사명)에서 유추되지 않아야 합니다. NIST SP 800-63B(2025년 개정판)는 복잡도 규칙(대소문자·기호 강제)보다 길이를 중시하라고 권하고, 유출된 비밀번호 목록과 대조해 거르라고 합니다.
찾지 못했다면 그 원문은 이 방식으로는 현실적으로 뚫리지 않는다는 뜻입니다. 그것이 바로 좋은 비밀번호의 모습입니다. 같은 사이트의 비밀번호 생성기로 길고 무작위한 값을 만들면 이 도구로 아무리 돌려도 나오지 않습니다.
예시
짧은 흔한 비밀번호 vs 긴 무작위 값
- 입력
MD5 해시 두 개: 하나는 흔한 짧은 단어, 하나는 16자 무작위 문자열의 해시- 결과
앞의 것은 사전 공격에서 거의 즉시 발견, 뒤의 것은 탐색 범위를 다 돌아도 미발견
16자 무작위(대소문자+숫자+기호, 약 87종)의 조합 수는 87^16 ≈ 3.4×10^30입니다. 초당 수억 개를 시험해도 우주 나이보다 오래 걸립니다.
솔트가 있는지 없는지의 차이
- 입력
같은 원문의 SHA-1을, 솔트 없이 / 앞에 고정 문자열을 붙여서 두 번 계산해 비교- 결과
두 해시는 완전히 다른 값. 솔트를 모르면 무차별 대입으로도 재현되지 않음
이 도구의 접두 옵션에 정확한 솔트를 넣어야만 원문이 재현됩니다. 실무에서 솔트가 유출 대응의 첫 방어선인 이유입니다.
사용 방법
- 역산할 해시를 붙여넣습니다. 감지된 종류가 아래에 표시됩니다.
- 알고리즘을 자동 감지로 두거나 직접 고릅니다.
- 사전 공격, 무차별 대입, 마스크 중 방식을 고르고 필요하면 솔트·반복 횟수를 지정합니다.
- 실행합니다. 찾으면 원문이, 못 찾으면 시도 횟수와 함께 미발견으로 표시됩니다.
주요 용어
- 사전 공격
- 자주 쓰이는 약한 비밀번호와 단어 목록을 순서대로 해시해 대조하는 방식. 대소문자·역순 등 흔한 변형을 함께 시험하는 옵션이 있습니다.
- 무차별 대입
- 선택한 문자 집합으로 만들 수 있는 조합을 짧은 것부터 시도. 조합 수가 길이에 지수적으로 늘어 길이가 길면 사실상 불가능합니다.
- 마스크(hashcat 형식)
- 자리마다 문자 종류를 지정하는 패턴. ?l 소문자, ?u 대문자, ?d 숫자, ?s 기호 등. 원문의 형식을 알 때 범위를 줄입니다.
- 레인보우 테이블
- 미리 계산해 둔 해시-원문 대응표. 솔트가 있으면 무력화됩니다.
자주 묻는 질문
해시는 되돌릴 수 없다면서요?
맞습니다. 수학적으로 되돌리는 게 아니라 후보를 대량으로 해시해 맞춰 보는 것뿐입니다. 약하거나 짧은 원문만 현실적으로 찾을 수 있습니다.
왜 브라우저에서 하나요?
느리지만 해시가 절대 밖으로 나가지 않습니다. GPU 전용 도구보다는 훨씬 느립니다.
bcrypt 해시도 되나요?
안 됩니다. bcrypt·scrypt·Argon2는 일부러 느리게 설계돼 이 방식이 성립하지 않습니다. 그래서 실무에서 이런 함수를 씁니다.
남의 해시를 되찾아도 되나요?
본인 소유가 아닌 해시를 되찾는 것은 불법일 수 있습니다. 본인 데이터, 명시적 허가, 학습 목적에만 쓰세요.
관련 가이드
출처
- NIST SP 800-63B — Digital Identity Guidelines: Authentication (v4.0, 2025)
- OWASP — Password Storage Cheat Sheet
- RFC 6151 — Updated Security Considerations for MD5 and HMAC-MD5
기준일: