Ir al contenido

hashID

hashID is a Python-based hash identification tool that recognizes 220+ hash types and formats. It helps pentesters, forensics analysts, and security researchers quickly identify hash algorithms before selecting appropriate cracking tools like Hashcat or John the Ripper.

git clone https://github.com/psneuzil/hashID.git
cd hashID
python3 hashid.py --help
pip install hashid
docker run -it --rm psneuzil/hashid <hash>
# Interactive mode - paste hash at prompt
python3 hashid.py

# Identify specific hash
python3 hashid.py "5f4dcc3b5aa765d61d8327deb882cf99"

# Identify from file
python3 hashid.py -f hashes.txt

# Quiet mode - minimal output
python3 hashid.py "hash_here" -q
$ python3 hashid.py "5f4dcc3b5aa765d61d8327deb882cf99"
Analyzing '5f4dcc3b5aa765d61d8327deb882cf99'
[+] MD5
[+] MD4
[+] Double MD5
[+] LM
[+] RIPEMD-128
[+] Haval-128
[+] Tiger-128
[+] Skein-256(128)
[+] Skein-512(128)
Hash TypeLengthExample
MD532 hex5f4dcc3b5aa765d61d8327deb882cf99
SHA-140 hex356a192b7913b04c54574d18c28d46e6395428ab
SHA-25664 hexe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
SHA-512128 hexcf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e
NTLM32 hex5f4dcc3b5aa765d61d8327deb882cf99
bcryptVariable$2a$10$Dex8PPccx92u8.jVewYM2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW
Kerberos 5 TGTSpecial format$krb5tgs$23$*user$realm$spn*$...
NetNTLMv2Special formatuser::DOMAIN:...
MySQL40 hex*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
MSSQL (2000/2005)40 hex0x0100A607BA7C54A24D17B565BAFCC390F216C8CCB
Oracle 10g+32 hexS:8F2D9E8F8F2D9E8F8F2D9E8F8F2D9E8FA1B2C3D4
PostgreSQLVariablemd5abcd1234...
WordPress32 hex5f4dcc3b5aa765d61d8327deb882cf99
WPA-PBKDF2256+ hexESSID:...
LM Hash32 hexAABBCCDD...
DES CryptVariable$1$...
# Identify all hashes in a file (one per line)
python3 hashid.py -f hashes.txt

# Save results to file
python3 hashid.py -f hashes.txt > results.txt

# Identify and show hashcat modes
python3 hashid.py -f hashes.txt -m
# One hash per line
cat hashes.txt
5f4dcc3b5aa765d61d8327deb882cf99
356a192b7913b04c54574d18c28d46e6395428ab
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
# Show Hashcat mode numbers for cracking
python3 hashid.py "hash" -m

# Example output:
# [+] MD5 [Hashcat Mode: 0]
# [+] MD4 [Hashcat Mode: 900]
# [+] Double MD5 [Hashcat Mode: 2600]
# Show John format identifiers
python3 hashid.py "hash" -j

# Example output:
# [+] MD5 [JtR Format: raw-md5]
# [+] SHA-1 [JtR Format: raw-sha1]
# Show all possible algorithms including unlikely ones
python3 hashid.py "hash" -e

# Useful when standard identification is ambiguous
# Output in JSON format for scripting
python3 hashid.py "hash" --json

# Example:
# {"hash": "5f4dcc3b5aa765d61d8327deb882cf99", "algorithms": ["MD5", "MD4", ...]}
# 1. Identify hash type
python3 hashid.py "hash" -m
# Output: [Hashcat Mode: 0]

# 2. Crack with identified mode
hashcat -m 0 -a 0 hash.txt wordlist.txt

# 3. Crack with rules
hashcat -m 0 -a 0 hash.txt wordlist.txt -r rules.txt

# 4. Brute force (small mode space)
hashcat -m 0 -a 3 hash.txt ?a?a?a?a
# 1. Identify hash type
python3 hashid.py "hash" -j
# Output: [JtR Format: raw-md5]

# 2. Crack with identified format
john --format=raw-md5 hash.txt --wordlist=wordlist.txt

# 3. Show cracked passwords
john --format=raw-md5 hash.txt --show

# 4. Brute force attempt
john --format=raw-md5 hash.txt --incremental
# NTLM (Windows password hashes)
python3 hashid.py "aabbccdd1234567890abcdef12345678"
# Output will show NTLM, MD4, MD5 possibilities
# Use -m to get Hashcat mode 1000 (NTLM)
# bcrypt format (automatically detected by $2a/$2b/$2y)
python3 hashid.py '$2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW'
# [+] bcrypt [JtR Format: bcrypt] [Hashcat Mode: 3200]
# Kerberos 5 TGT format
python3 hashid.py '$krb5tgs$23$*user$REALM$service*$hash...'
# [+] Kerberos 5 TGT [Hashcat Mode: 13100]
# MSSQL 2012+ (SHA2-based)
python3 hashid.py '0x0200...'
# [+] MSSQL (2012, 2014) [Hashcat Mode: 1731]
# NetNTLMv2 from Responder capture
python3 hashid.py -f responder_hashes.txt -m
# Quickly identify all captured hashes with Hashcat modes
# 1. Try extended mode to see all possibilities
python3 hashid.py "hash" -e

# 2. Check hash format/length - ensure it's complete
echo "hash" | wc -c

# 3. Try online tools as secondary check
# https://hashes.com/en/tools/hash_identifier
# Use context clues:
# - Source (Windows = NTLM likely)
# - Length (64 chars = SHA-256 or bcrypt header)
# - Format ($2a$ = bcrypt, $krb5 = Kerberos)

# Use Hashcat mode testing
hashcat -m 0 hash.txt wordlist.txt --workload-profile=1
hashcat -m 900 hash.txt wordlist.txt --workload-profile=1
# Try different modes until one cracks
FeaturehashIDhash-identifiername-that-hash
Hash Types220+100+Similar to hashID
Hashcat ModesYesNoYes
John FormatsYesNoYes
Installationpip/gitperl scriptpip
SpeedFastFastFast
GUINoNoGUI available
# Always identify hash type first
python3 hashid.py "hash" -m > modes.txt

# Prevents wasting time on wrong attack modes
# Hashcat mode mismatch = no cracks
# 32-character hex strings are common for multiple algorithms
python3 hashid.py "5f4dcc3b5aa765d61d8327deb882cf99" -e

# Extended mode shows LM, DES, Snefru, Tiger, etc.
# Ensure hash format is valid
echo "hash" | grep -E '^[a-fA-F0-9]+$'

# Remove formatting, extra whitespace
cat hashes.txt | tr -d ' ' > hashes_clean.txt
# Chain with Hashcat
python3 hashid.py -f hashes.txt -m | \
  awk -F': ' '{print $NF}' | \
  xargs -I {} hashcat -m {} hashes.txt wordlist.txt

# Pipe to JtR
python3 hashid.py -f hashes.txt -j | \
  grep "JtR Format" | \
  awk -F': ' '{print $NF}' | \
  xargs -I {} john --format={} hashes.txt
  • MD5, MD4, MD2, MD1
  • SHA-1, SHA-224, SHA-256, SHA-384, SHA-512
  • RIPEMD-128, RIPEMD-160, RIPEMD-256, RIPEMD-320
  • Whirlpool, Tiger, Haval
  • bcrypt, scrypt, Argon2, PBKDF2
  • Kerberos (TGT, AS-REQ)
  • NTLM, NetNTLM, NetNTLMv2
  • MySQL, PostgreSQL, MSSQL, Oracle
  • WordPress, Joomla, Drupal
  • WPA, WPA2, WPA3
  • DES, 3DES, Blowfish
  • And 170+ more algorithm variations