암호화 식별자
데이터베이스 덤프를 수집하다 보면 $2y$10$...이나 5f4dcc3b5aa765d61d8327deb882cf99 같은 문자열을 발견하게 되는데, 크래킹이나 역변환을 시작하기 전에 그것이 무엇인지부터 파악해야 합니다. 이 식별자는 길이, 문자 집합, 구조, 접두사에 관한 휴리스틱을 적용하여 암호문 샘플 뒤에 있을 가능성이 가장 높은 알고리즘이나 인코딩 방식을 추정합니다.
암호문을 식별하는 방법
-
1
샘플을 붙여넣으세요
단일 해시값, 암호문 블롭, 토큰 또는 인코딩된 문자열.
-
2
일치하는 형식 확인하기
패턴이 샘플과 일치하는 모든 형식이 결과에 나열됩니다.
-
3
교차 확인
여러 형식이 일치하면 해시 크래커나 디코더로 어떤 것이 올바른지 확인하세요.
-
4
불확실성 유의
샘플 하나만으로는 식별이 거의 확실하지 않으며, 일치하는 항목이 없으면 도구에 그렇게 표시됩니다.
식별자가 사용하는 시그니처 패턴
길이 기반 (16진수로 인코딩된 해시의 경우):
| 길이(16진수 문자 수) | 식별 결과 |
|---|---|
| 32 | MD5 |
| 40 | SHA-1 |
| 64 | SHA-256 |
| 128 | SHA-512 |
56자의 SHA-224나 96자의 SHA-384 같은 다른 길이는 해시로 인식되지 않습니다(56자 또는 96자의 16진 문자열은 대신 Base64로 분류됩니다).
접두사 기반 (인식되는 것은 bcrypt 접두사뿐입니다):
$2a$$2b$$2y$bcrypt
그 밖의 crypt 형식 접두사($1$, $5$, $6$, $argon2i$, $argon2id$, $pbkdf2$)는 인식되지 않습니다.
인코딩 기반:
- 모든 문자가
[A-Za-z0-9+/=]에 속하고 길이가 4의 배수인 경우: Base64일 가능성이 높습니다. .로 구분된 세 개의 세그먼트로, 각 세그먼트가[A-Za-z0-9_-]문자로 구성된 경우: JWT.
PEM 래퍼, OpenSSH ssh-rsa/ssh-ed25519 블롭, -나 _가 포함된 Base64url 문자열은 감지되지 않습니다.
식별로 알 수 없는 것
- 100% 확실한 정확한 알고리즘. 64자리 16진수 문자열은 SHA-256으로 표시되지만 SHA3-256이나 BLAKE2s일 수도 있으며, 이들은 암호문만으로는 구별할 수 없습니다. NTLM 해시(역시 32자 16진수)는 MD5와 똑같이 보입니다.
- 키 강도. bcrypt 해시는 접두사에 코스트 팩터를 표시하지만(
$2y$10$= 코스트 10), 실제 비밀번호 자체의 강도는 알려주지 않습니다. - 솔트 적용 여부. 최신 비밀번호 해시(bcrypt, Argon2)는 항상 솔트가 적용되지만, 구형 방식(원시 MD5/SHA)은 적용될 수도, 그렇지 않을 수도 있습니다.
- 평문. 식별은 해시를 되돌리지 않습니다. 크래킹은 별도의 과정이며, 오직 자신의 데이터에 대해서만 합법적으로 수행할 수 있습니다.
식별자가 틀리는 경우
- 사용자 지정 접두사가 붙은 토큰. 애플리케이션이 해시에 자체 접두사를 감싸 두는 경우가 있습니다. 먼저 그 래퍼를 제거하세요.
- 이중 인코딩. 바이너리 해시를 16진수화한 뒤 다시 Base64로 감싼 값은 잘못 식별됩니다. 한 번 디코딩한 뒤 다시 실행해 보세요.
- 비정상적인 길이. 잘린 해시(SHA-256의 앞 16자를 ID로 사용한 경우 등)는 문자와 길이 규칙이 겹치기 때문에 “Base64”로 표시됩니다.
- 틀 안에 있거나 포장된 형식. PEM 블록, OpenSSH 키, Django의
pbkdf2_sha256$...는 인식되지 않습니다. 래퍼나 접두사를 제거하고 다시 시도하거나 전용 파서를 사용하세요.
사용 사례
- 보안 감사: 암호화 방식 마이그레이션에 앞서 코드베이스 전반의 해시 유형을 목록화합니다.
- CTF 챌린지: 알 수 없는 데이터에 대한 빠른 1차 점검.
- 인시던트 대응: 유출된 자격 증명의 형식을 식별합니다.
- 프레임워크 디버깅: 라이브러리가 어떤 인코딩을 생성하는지 파악합니다.
윤리적 유의 사항
해시 형식을 식별하는 것은 수동적인 조사에 불과합니다. 권한 없이 타인의 해시를 크래킹하는 행위는 대부분의 관할 지역에서 컴퓨터 오용 관련 법률을 위반합니다. 오직 자신이 소유하거나 분석 권한이 있는 해시만을 대상으로 하세요.
자주 묻는 질문
부분적으로는 가능합니다. MD5는 16진수 32자, SHA-1은 40자입니다. 다만 둘의 길이 범위가 같은 경우 해시만으로는 구별할 수 없습니다. 보통은 맥락(데이터베이스 열 이름, 프레임워크 기본값, 유출된 스키마 등)을 통해 판별할 수 있습니다.
아니요. 식별만 수행합니다. 해시를 역산하거나 암호문을 복호화하려면 별도의 도구(그리고 키 또는 크래킹에 필요한 계산 자원)가 필요하며, 이러한 작업은 오직 자신의 자료에 대해서만 합법적으로 수행할 수 있습니다.
Argon2id(또는 높은 코스트 팩터의 bcrypt)가 현재 권장되는 방법입니다. PBKDF2-SHA256과 scrypt도 여전히 허용됩니다. 반면 순수 MD5, SHA-1 또는 솔트 없는 SHA-256은 비밀번호 저장에 안전하지 않습니다.
아니요. 붙여넣은 값은 형식 확인을 위해 당사 서버로 전송되지만 데이터베이스에 저장되지 않으며 페이지 링크에도 추가되지 않습니다.
관련 도구
Base64 파일 인코더
모든 파일(PDF, ZIP, 이미지, 실행 파일)을 Base64 텍스트로 인코딩해 JSON, 이메일, YAML, data URI에 삽입하세요. 브라우저에서 로컬로 실행되며 업로드가 없습니다.
Base58 인코더 및 디코더
UTF-8 텍스트나 16진수 바이트를 인코딩하고 Bitcoin, Ripple, Flickr 알파벳으로 Base58을 안전하게 디코딩하세요.
AES 암호화 / 복호화
OpenSSL의 AES cipher로 낮은 위험의 텍스트를 암호화하고 복호화합니다. passphrase는 SHA-256으로 해시되며 Base64 출력은 IV와 암호문을 담습니다.
A1Z26 암호 인코더
A1Z26 암호(A=1, B=2, ... Z=26)로 텍스트를 인코딩하거나 숫자열을 다시 글자로 디코딩합니다. 구분자도 사용자 지정할 수 있습니다.
암호 식별기
암호문을 붙여 넣으면 Base64, hex, 이진수, 모스, 시저 또는 치환, JWT, 일반적인 해시 등 가능성이 높은 인코딩/암호 방식을 제안합니다.
bcrypt 생성기
plaintext password에서 bcrypt hash를 생성합니다. cost factor 4부터 13까지 조정 가능하며 Laravel, Django, Node, PHP와 호환됩니다.
이 도구는 다른 언어로도 제공됩니다
- Identyfikator szyfrowania [PL]
- Verschlüsselungs-Identifikator [DE]
- Mã định danh mã hóa [VI]
- Identificateur de chiffrement [FR]
- Şifreleme Tanımlayıcısı [TR]
- Identificador de Criptografia [PT]
- معرّف التشفير [AR]
- Krypteringsidentifierare [SV]
- Versleutelingsidentifier [NL]
- Encryption Identifier [EN]
- 加密标识符 [ZH]
- Identificador de Cifrado [ES]
- ตัวระบุการเข้ารหัส [TH]
- Identifikasi Enkripsi [ID]
- 暗号化識別子 [JA]
- Identificatore di Crittografia [IT]
- Идентификатор шифрования [RU]