Hash Identifier
Free hash identifier that names the format of a hash, validates its structure, and shows its parameters and audit tool modes. Runs in your browser.
Updated
One per line. Shadow, pwdump, user:hash and checksum lines work as they are.
Options
Where the hash is from changes only the order of formats that share a length, such as MD5 and NTLM.
Paste a hash to identify its format, or several hashes with one per line.
What Is a Hash Identifier?
The hash identifier names the format of a hash or password hash from its prefix, length and characters. It separates exact matches, where every part of the value has the length and alphabet the format requires, from formats that only share a length, such as MD5 and NTLM. It knows 90 formats. For each candidate it shows the hashcat mode, the John the Ripper format, and the parameters stored in the hash, such as the bcrypt cost or the Argon2 memory size. It also reads /etc/shadow, pwdump and user:hash lines.
How to Use the Hash Identifier
- Paste a hash, or several hashes with one per line. Lines from /etc/shadow, pwdump output and user:hash lists work as they are.
- If several formats share the same length, pick where the hash came from to list the likely ones first.
- Read the exact or possible formats, the parameters stored in the hash, and the notes on each format.
- Copy the hashcat mode or the John the Ripper format name of the top candidate.
How It Works
Many password hash formats start with a prefix that names the method, followed by parameters, a salt and the hash, separated by $ characters. crypt(5) documents these prefixes, such as $y$ for yescrypt, $2b$ for bcrypt and $6$ for sha512crypt. Most methods use a salt so that the same passphrase can produce many possible hashes. Argon2 uses the PHC string format, which stores salt and hash in Base64 without padding.
The tool checks each value against its table of formats. A format with a prefix or fixed separators is an exact match only when every part has the documented length and alphabet, so a bcrypt hash needs a cost from 04 to 31 and 53 characters of salt and hash. A plain hex digest has no prefix, so every format with that length is possible: 32 hex digits fit MD5, which produces a 128-bit digest, and also NTLM, MD4 and LM. Within one length, the list follows the source you pick and then the site's listing order. The order is not a probability.
The parameters come from the hash itself. The bcrypt cost is the base-2 logarithm of the number of rounds, so an encoded 8 means 256 rounds (OpenBSD crypt(3)). sha256crypt and sha512crypt use 5000 rounds when the hash has no rounds= field, a default crypt(5) calls too low for modern hardware. Kerberos encryption type 23 is RC4-HMAC (RFC 4757), and types 17 and 18 are AES128 and AES256 (RFC 3962).
Mode numbers and names come from the hashcat 8.0.0 example hash list. hashcat 8.0.0 moved some modes into a number range reserved for recipes, and the old number still works, so the tool shows both. John the Ripper format names are the format labels in the John the Ripper jumbo source code.
Windows stores the NT hash, an unsalted MD4 hash of the password. The older LM hash pads the password with null bytes to 14 characters, converts it to uppercase and splits it into two 7-byte halves, so an empty half always gives the same value. Microsoft has disabled LM storage by default since Windows Vista and Windows Server 2008.
Each line of /etc/shadow has 9 fields separated by colons, and the hash is the second field. A password field that starts with ! marks a locked password (shadow(5)).
Formats with a fixed structure (58)
| Format | Type | hashcat mode | John the Ripper |
|---|---|---|---|
| yescrypt | Memory-hard password hash | 36100 | crypt |
| gost-yescrypt | Memory-hard password hash | 36200 | crypt |
| scrypt ($7$) | Memory-hard password hash | 36300 | scrypt |
| bcrypt | Adaptive password hash | 3200 | bcrypt |
| sha512crypt | Adaptive password hash | 1800 | sha512crypt |
| sha256crypt | Adaptive password hash | 7400 | sha256crypt |
| sm3crypt | Adaptive password hash | 35100 | sm3crypt |
| sha1crypt (NetBSD) | Legacy password hash | 40038 (was 15100) | sha1crypt |
| SunMD5 | Legacy password hash | 3300 | SunMD5 |
| md5crypt | Legacy password hash | 500 | md5crypt |
| Apache APR1-MD5 | Legacy password hash | 1600 | md5crypt-long |
| BSDi extended DES crypt | Legacy password hash | 12400 | bsdicrypt |
| Argon2 | Memory-hard password hash | 34000 | Argon2 |
| phpass (WordPress, phpBB3) | Legacy password hash | 400 | phpass |
| WordPress bcrypt (HMAC-SHA384 pre-hash) | Adaptive password hash | 35500 | None |
| Drupal 7 | Adaptive password hash | 40020 (was 7900) | Drupal7 |
| Django PBKDF2-SHA256 | Adaptive password hash | 40022 (was 10000) | Django |
| Django salted SHA-1 (legacy) | Legacy password hash | 124 | None |
| Werkzeug salted HMAC-SHA256 | Fast digest | 30120 | None |
| passlib bcrypt_sha256 | Adaptive password hash | 30601 | None |
| LDAP {SHA} (SHA-1, Base64) | Fast digest | 101 | Raw-SHA1 |
| LDAP {SSHA} (salted SHA-1, Base64) | Legacy password hash | 111 | Salted-SHA1 |
| LDAP {SSHA256} | Legacy password hash | 1411 | None |
| LDAP {SSHA512} | Legacy password hash | 1711 | None |
| Atlassian PBKDF2-HMAC-SHA1 | Adaptive password hash | 40033 (was 12001) | PBKDF2-HMAC-SHA1 |
| MySQL 4.1 and later | Legacy password hash | 300 | mysql-sha1 |
| MSSQL 2000 | Legacy password hash | 131 | mssql |
| MSSQL 2005 | Legacy password hash | 132 | mssql05 |
| MSSQL 2012 and later | Legacy password hash | 1731 | mssql12 |
| PostgreSQL MD5 (pg_authid) | Legacy password hash | 12 | None |
| PostgreSQL SCRAM-SHA-256 | Adaptive password hash | 40055 (was 28600) | SCRAM-PBKDF2-SHA256 |
| Windows pwdump line (LM and NT hashes) | Windows credential hash | 1000, 3000 | NT |
| NTLM with $NT$ tag | Windows credential hash | 1000 | NT |
| Domain Cached Credentials 2 (DCC2) | Windows credential hash | 2100 | mscash2 |
| NetNTLMv1 | Captured authentication exchange | 5500 | netntlm |
| NetNTLMv2 | Captured authentication exchange | 5600 | netntlmv2 |
| Kerberos 5 TGS-REP, etype 23 (RC4-HMAC) | Captured authentication exchange | 13100 | krb5tgs |
| Kerberos 5 TGS-REP, etype 17 (AES128) | Captured authentication exchange | 19600 | krb5tgs-sha1 |
| Kerberos 5 TGS-REP, etype 18 (AES256) | Captured authentication exchange | 19700 | krb5tgs-sha1 |
| Kerberos 5 AS-REP, etype 23 (RC4-HMAC) | Captured authentication exchange | 18200 | krb5asrep |
| Kerberos 5 AS-REP, etype 17 (AES128) | Captured authentication exchange | 32100 | krb5asrep |
| Kerberos 5 AS-REP, etype 18 (AES256) | Captured authentication exchange | 32200 | krb5asrep |
| Kerberos 5 AS-REQ pre-auth, etype 23 | Captured authentication exchange | 7500 | krb5pa-md5 |
| Kerberos 5 AS-REQ pre-auth, etype 17 | Captured authentication exchange | 19800 | krb5pa-sha1 |
| Kerberos 5 AS-REQ pre-auth, etype 18 | Captured authentication exchange | 19900 | krb5pa-sha1 |
| Cisco IOS type 8 (PBKDF2-SHA256) | Adaptive password hash | 40021 (was 9200) | PBKDF2-HMAC-SHA256 |
| Cisco IOS type 9 (scrypt) | Memory-hard password hash | 9300 | scrypt |
| BLAKE2b-512 ($BLAKE2$ tag) | Fast digest | 600 | Raw-Blake2 |
| JSON Web Token (HMAC signed) | Signed token | 16500 | HMAC-SHA256 |
| Microsoft Office 2007 and later | Encrypted file or wallet | 9400, 9500, 9600 | Office |
| PDF document | Encrypted file or wallet | 10400, 10500, 10600, 10700 | |
| WinZip AES | Encrypted file or wallet | 13600 | ZIP |
| PKZIP (ZipCrypto) | Encrypted file or wallet | 17200, 17210, 17220, 17225, 17230 | PKZIP |
| 7-Zip | Encrypted file or wallet | 11600 | 7z |
| RAR5 | Encrypted file or wallet | 13000 | RAR5 |
| KeePass database | Encrypted file or wallet | 13400, 34300, 34301 | KeePass |
| Bitcoin Core wallet.dat | Encrypted file or wallet | 11300 | Bitcoin |
| WPA-PBKDF2 PMKID or EAPOL (hashcat 22000) | Captured authentication exchange | 22000, 22001 | None |
Formats identified by length only (32)
| Format | Type | hashcat mode | John the Ripper |
|---|---|---|---|
| Traditional DES crypt | Legacy password hash | 1500 | descrypt |
| MySQL 3.2.3 (OLD_PASSWORD) | Legacy password hash | 200 | mysql |
| Domain Cached Credentials (DCC) | Windows credential hash | 1100 | mscash |
| CRC-32 | Checksum | 11500 | CRC32 |
| LM (one 16-character half) | Windows credential hash | 3000 | LM |
| Half MD5 | Fast digest | 5100 | None |
| MD5 | Fast digest | 0 | Raw-MD5 |
| NTLM (NT hash) | Windows credential hash | 1000 | NT |
| MD4 | Fast digest | 900 | Raw-MD4 |
| LM (both halves) | Windows credential hash | 3000 | LM |
| SHA-1 | Fast digest | 100 | Raw-SHA1 |
| RIPEMD-160 | Fast digest | 6000 | dynamic_130 |
| MySQL 4.1 and later (without the asterisk) | Legacy password hash | 300 | mysql-sha1 |
| macOS 10.4 to 10.6 (salted SHA-1) | Legacy password hash | 122 | xsha |
| SHA-224 | Fast digest | 1300 | Raw-SHA224 |
| SHA3-224 | Fast digest | 17300 | dynamic_370 |
| Keccak-224 | Fast digest | 17700 | dynamic_430 |
| SHA-256 | Fast digest | 1400 | Raw-SHA256 |
| SHA3-256 | Fast digest | 17400 | dynamic_380 |
| Keccak-256 | Fast digest | 17800 | Raw-Keccak-256 |
| SM3 | Fast digest | 31100 | dynamic_450 |
| GOST R 34.11-94 | Fast digest | 6900 | gost |
| GOST R 34.11-2012 (Streebog) 256-bit | Fast digest | 11700 | None |
| RIPEMD-320 | Fast digest | 33600 | dynamic_150 |
| SHA-384 | Fast digest | 10800 | Raw-SHA384 |
| SHA3-384 | Fast digest | 17500 | dynamic_390 |
| Keccak-384 | Fast digest | 17900 | dynamic_440 |
| SHA-512 | Fast digest | 1700 | Raw-SHA512 |
| SHA3-512 | Fast digest | 17600 | Raw-SHA3 |
| Keccak-512 | Fast digest | 18000 | Raw-Keccak |
| Whirlpool | Fast digest | 6100 | dynamic_100 |
| GOST R 34.11-2012 (Streebog) 512-bit | Fast digest | 11800 | None |
Standards
Scope
What It Checks
- +Identifies 90 hash formats by prefix, length and character set: 58 with a fixed structure and 32 that only have a length and alphabet.
- +Validates the structure of each format, such as the bcrypt cost range of 04 to 31 and the salt and hash lengths of crypt formats.
- +Shows the hashcat mode and John the Ripper format for every candidate, with the earlier mode number where hashcat 8.0.0 renumbered it.
- +Reads the parameters stored in a hash: bcrypt cost, Argon2 memory, iterations and parallelism, sha512crypt rounds, PBKDF2 iterations, and the Kerberos encryption type. It flags a bcrypt cost or Django PBKDF2 iteration count below the OWASP minimum.
- +Reads /etc/shadow, pwdump, user:hash and hash:salt lines and checksum tool output, up to 100 lines at once.
- +Recognizes digests of empty input and the LM value of an empty password.
- +Explains why a value matches no format, such as an odd number of hex digits or Base64 that decodes to a digest length.
What It Does Not Check
- -It does not recover passwords or look hashes up in any database.
- -It cannot tell apart formats that share a length and character set, such as MD5 and NTLM. It lists them as possible formats.
- -It does not check that a hash was computed correctly or that it belongs to a given password.
- -It does not identify encrypted data, encodings, or application formats that are not in its table.
Defensive Use
OWASP recommends Argon2id for password storage and says fast hashing algorithms such as SHA-256 are not suitable for it. crypt(5) says md5crypt should not be used for new hashes, and Microsoft has deprecated all versions of NTLM. Identifying the format of stored hashes shows which accounts still use one of these methods and need a new password hash.
Frequently Asked Questions
What is a Hash Identifier?→
The hash identifier names the format of a hash or password hash from its prefix, length and characters. It separates exact matches, where every part of the value has the length and alphabet the format requires, from formats that only share a length, such as MD5 and NTLM. It knows 90 formats. For each candidate it shows the hashcat mode, the John the Ripper format, and the parameters stored in the hash, such as the bcrypt cost or the Argon2 memory size. It also reads /etc/shadow, pwdump and user:hash lines.
What is the Hash Identifier used for?→
Working out what kind of hash a database export, configuration file or incident artifact holds, checking whether stored password hashes use a method that should be replaced, and finding the format name a password audit tool expects.
Is my data sent anywhere?→
No. The Hash Identifier runs in your browser. What you enter stays on this page and is not sent to ImmunitySec or anyone else.
How is the Hash Identifier used defensively?→
OWASP recommends Argon2id for password storage and says fast hashing algorithms such as SHA-256 are not suitable for it. crypt(5) says md5crypt should not be used for new hashes, and Microsoft has deprecated all versions of NTLM. Identifying the format of stored hashes shows which accounts still use one of these methods and need a new password hash.
Can a hash identifier tell MD5 and NTLM apart?→
No. An MD5 digest and an NT hash are both 32 hexadecimal characters with no prefix, so the value fits both. Windows stores the NT hash as an MD4 hash of the password (Microsoft). Only the place the hash came from, such as a Windows account database or a list of file checksums, decides which one is likely.
What do the $2a$, $2b$ and $2y$ bcrypt prefixes mean?→
crypt(5) lists $2b$ as the bcrypt prefix. $2y$ is equivalent to $2b$ and exists for historical reasons only. $2a$ and $2x$ provide bug compatibility with crypt_blowfish 1.0.4 and earlier, which processed characters with the 8th bit set incorrectly.
Is it safe to paste a Windows hash here?→
The tool runs in your browser and sends nothing. Handle NT hashes like passwords anyway. MITRE ATT&CK describes pass the hash as authenticating as a user without access to the cleartext password.
Which password hash formats are recommended today?→
OWASP recommends Argon2id with at least 19 MiB of memory, 2 iterations and 1 degree of parallelism, and bcrypt with a work factor of 10 or more for legacy systems. crypt(5) recommends yescrypt for new hashes.
Why does the tool show two hashcat mode numbers?→
hashcat 8.0.0 defines some modes with a stored recipe and moved them into a number range reserved for recipes. The old number still works. The tool shows the 8.0.0 number with the earlier one, such as 40022 (was 10000) for Django PBKDF2-SHA256.
Mode numbers and names are from the hashcat 8.0.0 example hash list, format labels from the John the Ripper jumbo source, and the crypt format rules from the libxcrypt crypt(5) manual page.