해시 판별 도구(역추적)|MD5・SHA-1・SHA-256・SHA-512・SHA-3・BCrypt・Argon2 자동 판별

해시값처럼 보이는 문자열을 붙여넣기만 하면, 문자 수・문자 종류・접두사를 바탕으로 MD5, SHA-1, SHA-256, SHA-512, SHA-3, BCrypt, Argon2 중 어떤 알고리즘으로 생성되었을 가능성이 높은지 판별합니다. 판별은 모두 브라우저 안에서 완결됩니다.

해시값 자체에는 생성에 사용된 알고리즘 이름이 기록되어 있지 않습니다. 동일한 출력 길이를 여러 알고리즘이 공유하는 경우가 있으므로, 이 판별 결과는 문자 수・문자 종류・접두사에 근거한 "가장 가능성이 높은 추정"이며 100% 확정은 아닙니다.

해시값에서 알고리즘을 추정하기

**해시값 자체에는 생성에 쓰인 알고리즘 이름이 기록되어 있지 않습니다.** 그래도 추정은 할 수 있습니다. 실마리는 셋으로, **출력의 글자 수**(MD5는 32자, SHA-1은 40자, SHA-256은 64자, SHA-512는 128자), **문자 종류**(16진수인지 Base64인지), 그리고 **`$2b$`나 `$argon2id$` 같은 접두사**입니다. 이 도구는 이 세 가지로 가장 가능성이 높은 알고리즘을 판정합니다.

**다만 이는 단정이 아닙니다.** 같은 출력 길이를 여러 알고리즘이 공유하기 때문으로, 이를테면 64자의 16진수는 SHA-256뿐 아니라 SHA3-256이나 BLAKE2s일 수도 있습니다. 한편 bcrypt나 Argon2처럼 **파라미터를 담은 문자열 형식**을 가진 것은 접두사로 확실히 가려낼 수 있습니다. 판정은 모두 브라우저 안에서 완결되며 붙여 넣은 문자열이 전송되는 일은 없습니다.

판정하는 순서

  1. 해시 문자열을 붙여 넣습니다 앞뒤의 공백은 무시됩니다.
  2. 판정 결과를 읽습니다 후보가 되는 알고리즘이 가능성이 높은 순으로 표시됩니다.
  3. 글자 수와 문자 종류를 확인합니다 **왜 그 후보가 되었는지**를 알 수 있도록 근거도 함께 표시됩니다.
  4. 접두사의 유무를 봅니다 `$`로 시작하는 형식이면 후보는 거의 하나로 좁혀집니다.

더 잘 활용하기 위한 팁

  • 판별은 문자 수・문자 종류(16진수인지 Base64인지)・접두사만을 단서로 하며, 실제로 해시를 다시 계산하여 검증하는 것은 아닙니다. 어디까지나 "형식에서 추정 가능한 후보"를 보여주는 도구입니다.
  • BCrypt($2a$/$2b$/$2y$)와 Argon2($argon2id$ 등)는 접두사 자체에 알고리즘 이름과 매개변수가 담겨 있어 높은 확신도로 판별할 수 있습니다.
  • 64자리 16진수는 SHA-256이 가장 일반적이지만 SHA3-256도 같은 자릿수이므로, 원본 시스템(언어・라이브러리)을 알고 있다면 그 정보도 함께 참고하세요.
  • 여러 줄로 복사된 해시 덤프(줄바꿈・공백으로 구분된 것)도 내부 공백 문자를 자동으로 제거한 뒤 판별하므로 그대로 붙여넣어도 됩니다.
  • 판별 결과에 확신이 서지 않을 때는 해시가 생성된 애플리케이션의 소스 코드나 문서를 확인하는 것이 가장 확실한 방법입니다.

이럴 때 쓸 수 있습니다

인계받은 시스템을 조사할 때

데이터베이스에 남은 해시가 어떤 방식으로 만들어졌는지 우선 짐작을 잡을 수 있습니다.

이행 가부를 판단할 때

**bcrypt나 Argon2라면 파라미터째 유지하며 단계적으로 옮길 수 있습니다.**

보안상의 문제를 찾을 때

**MD5나 SHA-1이 패스워드 저장에 쓰이고 있다면 그 자체가 시정 대상입니다.**

로그나 덤프의 내용을 읽을 때

정체 모를 긴 16진 문자열이 무엇인지 조사하는 실마리가 됩니다.

해시 용어

MD5
128비트의 해시 함수입니다. **충돌을 현실적으로 만들 수 있어 패스워드에도 변조 탐지에도 써서는 안 됩니다.**
SHA-1
160비트의 해시 함수입니다. MD5와 마찬가지로 충돌 공격이 실증되어 권장되지 않습니다.
SHA-256 / SHA-512
SHA-2 계열의 함수입니다. **빠르다는 점이 패스워드 저장에서는 도리어 약점이 됩니다.**
bcrypt
패스워드 전용 해시로, 비용 계수를 문자열에 담습니다. `$2a$`·`$2b$`로 시작합니다.
Argon2
2015년 경진대회에서 우승한 패스워드 해시입니다. `$argon2id$`로 시작하며 메모리 양도 조정할 수 있습니다.
솔트
해시마다 바꾸는 난수입니다. bcrypt와 Argon2는 **이것을 문자열에 박아 넣어 가집니다.**

자주 묻는 질문

해시값만으로는 불가능합니다. SHA-256과 SHA3-256처럼 출력 자릿수가 완전히 일치하는 알고리즘이 존재하기 때문에 출력만 보고 확정할 수 없습니다. 확실히 알고 싶다면 그 해시를 생성한 애플리케이션의 소스 코드나 문서를 확인해야 합니다.

BCrypt와 Argon2는 비밀번호 저장 전용으로 설계되어 있으며, 해시값 맨 앞에 $2b$나 $argon2id$와 같은 알고리즘 이름・매개변수를 텍스트로 삽입하는 "모듈러 크립트 형식"을 채택하고 있기 때문입니다. 이 정보를 읽을 수 있는 한 알고리즘을 고유하게 확정할 수 있습니다.

아니요, 알 수 없습니다. 이 도구는 해시값의 "겉모습"에서 알고리즘 종류를 추정할 뿐이며, 해시로부터 원본 데이터를 복원하는 기능(무차별 대입 공격 등)은 전혀 제공하지 않습니다.

MD5・SHA-1은 충돌 저항성이 깨져 있으므로, 비밀번호 저장 용도로 발견되었다면 보안 위험으로 다루어야 합니다. 시스템 이전 대상으로는 비밀번호 저장 전용으로 설계된 BCrypt나 Argon2id로 전환하는 것이 권장됩니다.

네. 본 사이트의 해시 일괄 계산・비교 도구를 사용하면 같은 문자열을 입력하여 MD5, SHA-1, SHA-256, SHA-512, SHA-3, BCrypt, 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 등의 공격 모드 선택)을 효율적으로 결정할 수 있기 때문입니다.