해시 판별 도구(역추적)|MD5・SHA-1・SHA-256・SHA-512・SHA-3・BCrypt・Argon2 자동 판별
해시값처럼 보이는 문자열을 붙여넣기만 하면, 문자 수・문자 종류・접두사를 바탕으로 MD5, SHA-1, SHA-256, SHA-512, SHA-3, BCrypt, Argon2 중 어떤 알고리즘으로 생성되었을 가능성이 높은지 판별합니다. 판별은 모두 브라우저 안에서 완결됩니다.
해시값 자체에는 생성에 사용된 알고리즘 이름이 기록되어 있지 않습니다. 동일한 출력 길이를 여러 알고리즘이 공유하는 경우가 있으므로, 이 판별 결과는 문자 수・문자 종류・접두사에 근거한 "가장 가능성이 높은 추정"이며 100% 확정은 아닙니다.
해시 판별 팁
- 판별은 문자 수・문자 종류(16진수인지 Base64인지)・접두사만을 단서로 하며, 실제로 해시를 다시 계산하여 검증하는 것은 아닙니다. 어디까지나 "형식에서 추정 가능한 후보"를 보여주는 도구입니다.
- BCrypt(
$2a$/$2b$/$2y$)와 Argon2($argon2id$등)는 접두사 자체에 알고리즘 이름과 매개변수가 담겨 있어 높은 확신도로 판별할 수 있습니다. - 64자리 16진수는 SHA-256이 가장 일반적이지만 SHA3-256도 같은 자릿수이므로, 원본 시스템(언어・라이브러리)을 알고 있다면 그 정보도 함께 참고하세요.
- 여러 줄로 복사된 해시 덤프(줄바꿈・공백으로 구분된 것)도 내부 공백 문자를 자동으로 제거한 뒤 판별하므로 그대로 붙여넣어도 됩니다.
- 판별 결과에 확신이 서지 않을 때는 해시가 생성된 애플리케이션의 소스 코드나 문서를 확인하는 것이 가장 확실한 방법입니다.
자주 묻는 질문
$2b$나 $argon2id$와 같은 알고리즘 이름・매개변수를 텍스트로 삽입하는 "모듈러 크립트 형식"을 채택하고 있기 때문입니다. 이 정보를 읽을 수 있는 한 알고리즘을 고유하게 확정할 수 있습니다.
여담 ― 해시값만으로는 왜 알고리즘을 확정할 수 없을까
해시 함수의 역할은 "입력 데이터를 고정 길이 출력으로 변환하는 것"이며, 그 출력(다이제스트) 자체에는 알고리즘 이름을 나타내는 메타데이터가 전혀 포함되지 않습니다. 이는 설계상 필연적인 결과입니다. 만약 메타데이터를 삽입한다면 출력 길이가 달라져 암호학적 해시 함수의 핵심 성질인 "고정 길이"가 무너지기 때문입니다. 따라서 우리가 단서로 삼을 수 있는 것은 출력의 "겉모습"(문자 수・문자 종류)뿐입니다.
이 제약이 가장 두드러지게 나타나는 것이 SHA-2 계열과 SHA-3 계열의 관계입니다. SHA-256과 SHA3-256은 전혀 다른 내부 구조(SHA-2는 Merkle-Damgård 구조, SHA-3는 스펀지 구조)를 가지고 있지만, 둘 다 256비트, 즉 16진수 64자리 출력이 되도록 설계되어 있습니다. SHA-224와 SHA3-224, SHA-384와 SHA3-384, SHA-512와 SHA3-512도 같은 관계이며, 출력 길이만 보고 어느 쪽인지 확정할 수 없습니다. 실무에서는 SHA-2 계열이 압도적으로 널리 쓰이므로 이 도구도 자릿수가 일치할 경우 SHA-2 계열을 우선 후보로 제시하지만, 이는 어디까지나 통계적 경향에 근거한 추정입니다.
반면 BCrypt나 Argon2처럼 비밀번호 해싱 전용으로 설계된 알고리즘은 이러한 모호함을 해소하기 위해 "모듈러 크립트 형식"이라는 자기 기술형 포맷을 채택하고 있습니다. $2b$12$...나 $argon2id$v=19$...처럼 맨 앞에 알고리즘 이름・버전・매개변수를 텍스트로 삽입함으로써, 해시값만 보고도 계산 방식을 고유하게 복원할 수 있게 한 것입니다. 이런 형식의 해시를 만나면 확정적인 판별이 가능해집니다.
이러한 판별 작업은 레거시 시스템에서 발굴된 비밀번호 덤프를 조사하거나, CTF(Capture The Flag)라 불리는 보안 대회에서 암호 해독 문제를 풀 때 실제로 필요해지는 경우가 있습니다. 해시값에서 알고리즘을 좁힐 수 있으면, 다음에 시도할 분석 도구나 크래킹 기법(Hashcat 등의 공격 모드 선택)을 효율적으로 결정할 수 있기 때문입니다.