해시 역산기

MD5·SHA·NTLM·RIPEMD 해시를 사전·무차별·마스크로 다중 스레드 복원

공격 방식
솔트 · 반복 (선택)

hash(앞 + 후보 + 뒤) 를 지정 횟수만큼 반복합니다. 예: md5(md5($pw)) → 2회.

잊어버린 자신의 비밀번호·체크섬의 원문을 사전·무차별·마스크로 되찾는 도구입니다. 계산은 여러 스레드로 브라우저 안에서만 실행되며 해시는 어디로도 전송되지 않습니다. 솔트가 적용되었거나 충분히 긴 해시는 찾지 못할 수 있습니다.

해시 역산기 소개

이 도구는 잊어버린 본인 소유의 비밀번호나 체크섬을 되찾고, 해시가 왜 취약해지는지 직접 확인해 보기 위한 학습용 도구입니다. 남의 계정이나 데이터의 해시를 되찾는 데 쓰면 법적으로 문제가 될 수 있습니다. 본인 소유, 본인 테스트 데이터, 또는 명시적 허가가 있는 경우에만 쓰세요.

해시는 수학적으로 되돌릴 수 없습니다. 이 도구도 역산을 하지 않습니다. 후보 문자열을 만들어 하나씩 해시한 뒤 목표 해시와 같은 값이 나오는지 비교할 뿐입니다. 그래서 결과는 알고리즘 종류보다 「원문이 후보 안에 들어 있느냐」와 「후보를 몇 개나 만들어야 하느냐」로 정해집니다. 계산은 전부 브라우저 안에서만 실행되고 입력한 해시는 서버로 전송되지 않습니다.

무엇을 되찾을 수 있고 무엇을 못 되찾나

이 도구가 다루는 것은 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을, 솔트 없이 / 앞에 고정 문자열을 붙여서 두 번 계산해 비교
결과
두 해시는 완전히 다른 값. 솔트를 모르면 무차별 대입으로도 재현되지 않음

이 도구의 접두 옵션에 정확한 솔트를 넣어야만 원문이 재현됩니다. 실무에서 솔트가 유출 대응의 첫 방어선인 이유입니다.

사용 방법

  1. 역산할 해시를 붙여넣습니다. 감지된 종류가 아래에 표시됩니다.
  2. 알고리즘을 자동 감지로 두거나 직접 고릅니다.
  3. 사전 공격, 무차별 대입, 마스크 중 방식을 고르고 필요하면 솔트·반복 횟수를 지정합니다.
  4. 실행합니다. 찾으면 원문이, 못 찾으면 시도 횟수와 함께 미발견으로 표시됩니다.

주요 용어

사전 공격
자주 쓰이는 약한 비밀번호와 단어 목록을 순서대로 해시해 대조하는 방식. 대소문자·역순 등 흔한 변형을 함께 시험하는 옵션이 있습니다.
무차별 대입
선택한 문자 집합으로 만들 수 있는 조합을 짧은 것부터 시도. 조합 수가 길이에 지수적으로 늘어 길이가 길면 사실상 불가능합니다.
마스크(hashcat 형식)
자리마다 문자 종류를 지정하는 패턴. ?l 소문자, ?u 대문자, ?d 숫자, ?s 기호 등. 원문의 형식을 알 때 범위를 줄입니다.
레인보우 테이블
미리 계산해 둔 해시-원문 대응표. 솔트가 있으면 무력화됩니다.

자주 묻는 질문

해시는 되돌릴 수 없다면서요?

맞습니다. 수학적으로 되돌리는 게 아니라 후보를 대량으로 해시해 맞춰 보는 것뿐입니다. 약하거나 짧은 원문만 현실적으로 찾을 수 있습니다.

왜 브라우저에서 하나요?

느리지만 해시가 절대 밖으로 나가지 않습니다. GPU 전용 도구보다는 훨씬 느립니다.

bcrypt 해시도 되나요?

안 됩니다. bcrypt·scrypt·Argon2는 일부러 느리게 설계돼 이 방식이 성립하지 않습니다. 그래서 실무에서 이런 함수를 씁니다.

남의 해시를 되찾아도 되나요?

본인 소유가 아닌 해시를 되찾는 것은 불법일 수 있습니다. 본인 데이터, 명시적 허가, 학습 목적에만 쓰세요.

관련 가이드

출처

기준일:

개인정보와 저장 방식