Hash Identifier
Paste a hash and see every algorithm it could be — prefixes parsed, parameters read, ambiguity shown honestly.
Paste a hash and its shape is measured here.
Paste a hash and the formats it could be appear here.
This is identification, not cracking: it reads the shape of the string. It does not reverse a hash, and this site will never look one up.
Press ? for shortcuts
Do it offline:$ hashid '$2b$12$WG0J84pAJRwWnBt6atilD.n6srenOEWG7/NQAyq9tuF8FIBSwShLq'
How to use it
- Paste one hash. Surrounding whitespace and wrapping quotes are ignored, and a multi-line paste is read one line at a time.
- Read the shape block first: prefix, character count, alphabet, case and decoded width are facts about the token itself.
- Then read the ranked list. A parsed prefix gives one answer with its parameters; a bare digest gives every format of that width.
- Follow a candidate through to the page that computes it, or copy the whole reading as JSON.
Paste a hash and this page reads its shape: the structural prefix, the character count, the alphabet, the letter case, and the width it decodes to. From that it lists every format the shape is consistent with, ranked, with any parameters it can parse. Where the shape cannot decide, all the candidates stay on screen. The reading happens in this tab.
Examples
9cc2ae8a1ba7a93da39b46fc1019c481length 32 characters
alphabet hex
case lower
decoded 16 bytes
token 9cc2ae8a1ba7a93da39b46fc1019c481
1. MD5 — ambiguous · digest
2. NTLM — ambiguous · digest
3. MD4 — ambiguous · digest
4. LM — ambiguous · digest
note 4 formats share this length and alphabet — nothing in the input itself can tell them apart.Sixteen bytes of hex carry no marker, so four formats stay on the list and the note says why. Picking one would be a guess dressed as an answer.
$2b$12$WG0J84pAJRwWnBt6atilD.n6srenOEWG7/NQAyq9tuF8FIBSwShLqlength 60 characters
alphabet mixed
case mixed
marker $2b$
separators $
token $2b$12$WG0J84pAJRwWnBt6atilD.n6srenOEWG7/NQAyq9tuF8FIBSwShLq
1. bcrypt — exact · crypt
variant = 2b
cost = 12
salt = WG0J84pAJRwWnBt6atilD.
digest = n6srenOEWG7/NQAyq9tuF8FIBSwShLqThe modular-crypt prefix names the format outright, so the list holds one row and the fields between the dollar signs are read out as data.
$argon2id$v=19$t=3,p=1,m=4096$aXRob21pYS1zYWx0LTE2Yg$P0UQ4OnK7Bz26qRIjcoqZJPZ2eZ8I8mAxBTsvz3Afiwlength 96 characters
alphabet mixed
case mixed
marker $argon2id$
separators $ ,
token $argon2id$v=19$t=3,p=1,m=4096$aXRob21pYS1zYWx0LTE2Yg$P0UQ4OnK7Bz26qRIjcoqZJPZ2eZ8I8mAxBTsvz3Afiw
1. Argon2id — strong · kdf
version = 19
memoryKiB = 4096
iterations = 3
parallelism = 1
salt = aXRob21pYS1zYWx0LTE2Yg
digest = P0UQ4OnK7Bz26qRIjcoqZJPZ2eZ8I8mAxBTsvz3AfiwHere the parameter field arrived shuffled. Each key is read on its own terms, so t before m changes nothing.
{SSHA}ow+/ep68ireSEiSkKqbWJpn4pzJzNGx0eSEhIQ==length 46 characters
alphabet base64
case mixed
marker {SSHA}
decoded 28 bytes
token {SSHA}ow+/ep68ireSEiSkKqbWJpn4pzJzNGx0eSEhIQ==
1. LDAP {SSHA} — exact · ldap
digest = a30fbf7a9ebc8ab7921224a42aa6d62699f8a732
digestLength = 20
salt = 73346c7479212121
saltLength = 8The braced marker is an LDAP scheme name. Its Base64 payload is twenty-eight bytes: twenty of digest, eight of trailing salt.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSBMb3ZlbGFjZSIsImlhdCI6MTUxNjIzOTAyMn0.A5WZhbQECpxxgWJwkkdDISdgTrxJz9oh4LTFgPFtJE8length 160 characters
alphabet base64url
case mixed
marker eyJ
separators .
token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSBMb3ZlbGFjZSIsImlhdCI6MTUxNjIzOTAyMn0.A5WZhbQECpxxgWJwkkdDISdgTrxJz9oh4LTFgPFtJE8
1. JWT (JSON Web Token) — exact · token
note This is a JSON Web Token, not a password hash — its header and payload are readable text.A token that opens with eyJ is a JSON Web Token. The reading says so and sends you to the decoder built for it, instead of ranking digest formats against it.
root:$6$saltstring$V.eAW2.uyBvM/1QmcSOAzwFwqygwxwBXBGBpNZZsYshYFqnBOLe/JGEHEL3L3vU5TS1QeGGv58Zgjt8ZOi7Ap3:19764:0:99999:7:::length 100 characters
alphabet mixed
case mixed
marker $6$
separators $ :
token $6$saltstring$V.eAW2.uyBvM/1QmcSOAzwFwqygwxwBXBGBpNZZsYshYFqnBOLe/JGEHEL3L3vU5TS1QeGGv58Zgjt8ZOi7Ap3
1. sha512crypt — exact · crypt
salt = saltstring
digest = V.eAW2.uyBvM/1QmcSOAzwFwqygwxwBXBGBpNZZsYshYFqnBOLe/JGEHEL3L3vU5TS1QeGGv58Zgjt8ZOi7Ap3
note This looks like a colon-separated account record, so the field that carries the hash was identified on its own.Pasted straight out of an account record: the name and the ageing counters are set aside, and the token line shows which span was read.
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
Thirty-two hex digits fit four formats
MD5, MD4, NTLM and LM all present as 32 hex characters, and no part of the token separates them. All four are listed, ordered by how often each turns up, which is an ordering and not proof.
Case belongs to the reading, not the list
Credential dumps often arrive upper-cased. The case row records what you pasted, and the candidate list stays exactly the same, because case carries no format information at all.
A braced scheme is not a bare digest
{SSHA} and {SMD5} append salt bytes to the digest, so their payloads are wider than the digest they contain. Once a scheme names itself, the raw-digest guesses are dropped rather than shown alongside it.
Argon2 fields tolerate order, padding and age
A parameter field may arrive shuffled, its Base64 salt may carry = padding, and a pre-19 encoding may omit the version key. Each case still reads back, and an absent version stays absent rather than being filled in.
Colon lines are records, not hashes
Shadow lines, pwdump rows and plain hash-and-salt pairs are split on the colon before anything is identified, and a note names what was set aside. The token row always shows the span that was read.
An odd hex count means something is missing
Hex arrives two characters per byte, so an odd count cannot be a whole digest. That earns a short-paste note and no candidates, which beats a confident answer about half a token.
Base64 that reads back as text was never hashed
If a Base64 payload decodes to printable characters it is encoded data, not a digest, and the reading says so — the decoder pages are where that belongs.
Common errors
This is 31 hex characters — an odd count, so at least one character is missing from the paste.- At least one character did not survive the copy. The number in the message is the count actually received, which usually shows where the selection stopped.
A bcrypt hash is exactly 60 characters — this input is 59. Check that the whole hash, and nothing else, was copied.- The prefix was read and bcrypt is still named, but a character is short of the fixed 60, so the parameters after it are not trusted. One dropped trailing character is the common cause.
No known format matches this input's prefix, length and alphabet.- Nothing in the frozen table fits what you pasted. That is a result, not a failure: the shape block still shows what was measured, so you can see which part looks unfamiliar.
Input is larger than the 4 KB limit for this tool.- One hash is a line, so the cap sits at four kilobytes and a larger paste is refused whole rather than scanned. The banner names a shell command for anything file-sized.
FAQ
Does this recover the password behind a hash?
No. It reads the shape of what you paste and names the formats that shape fits. There is no lookup, no wordlist and no cracking here, and reverse lookup is not something this platform will add later.
Why does one hash match several algorithms at once?
Because a bare digest carries no label. Once the prefix is absent, only the character count and the alphabet remain, and several algorithms produce identical widths. Every one of them is listed instead of the most flattering single answer.
What makes a match exact rather than a guess?
A structural prefix. Markers such as $2b$, $argon2id$, {SSHA} or pbkdf2_sha256$ are part of the stored format, so a parsed marker with readable parameters is reported as exact; a width-only reading is always marked ambiguous or weak.
Keyboard shortcuts
- ⌘/Ctrl + Enter
- Read the current input again.
- ⌘/Ctrl + C
- Copy the reading when nothing is selected; a live selection copies itself.
- ⌘/Ctrl + Shift + C
- Force-copy the reading whether or not text is selected.
- ⌘/Ctrl + S
- Save the reading as a .json download.
- t
- Step the theme on, whenever focus sits outside a text field.
- ? or ⌘/Ctrl + /
- Open the shortcut help dialog.
- Esc
- Close the top overlay; the input is never cleared.