Hash Identifier
Identify possible MD5, SHA-1, SHA-256, SHA3-256, SHA-512 and CRC32 formats. Check supported hashes against a custom wordlist directly in your browser.
Responsible use.For CTFs, learning and your own data. Don't use this on accounts or systems you don't own or have permission to test.
Hexadecimal, Base64 or a $-prefixed password hash. Limit 1,024 bytes (1 KiB).
🔒 Hashes, salts and wordlists are processed locally by this tool. It does not intentionally transmit them or include them in analytics events. Third-party scripts elsewhere on the page are outside this tool's processing boundary.
How to use the hash identifier (5 steps)
- Paste a hash: On the Input tab paste one hash (hexadecimal or Base64) or switch to Batch and paste one per line. A single input is limited to 1 KiB; a batch to 1,000 lines. The seven samples load fixed examples with known answers.
- Identify: The Identify tab lists every format the input could be, in separate groups: cryptographic hashes, the CRC32 checksum and password-hash formats. Each card says why it matched. Nothing is chosen for you.
- Pick what to check: Choose “Check this type against a wordlist” on a card, or tick algorithms on the Check tab. Add a salt if the hash was made by putting a fixed string before or after the word.
- Choose a wordlist and check: Use the bundled list (4,613 entries, version 1.0), upload your own (up to 200,000 lines and 4 MiB) or download the optional extended pack. Press Check; Cancel stops the run at once.
- Read the result: A match names the algorithm and the candidate word that produced your digest. No match means only that the word is not in the list you checked. Export the results as CSV or TXT, or send the word to another tool.
Generating, Identifying and Checking a Hash Are Three Different Things
Hash generation turns text into a fixed-length digest: the text “password” gives 5f4dcc3b5aa765d61d8327deb882cf99 under MD5. Hash identification starts from a digest and asks which algorithms could have produced a string of that shape. A wordlist check starts from a digest and a list of candidate words, hashes every word and compares the results. They are often lumped together under “hash cracker”, but they answer different questions, and only the third one can ever recover a word.
This tool does the second and third. It does not compute a hash from arbitrary text you type or generate guesses automatically. Instead, it checks candidate words from a wordlist against your digest and reports whether any candidate matches.
How Hash Identification Works
A digest is a sequence of bytes, and most algorithms produce a fixed number of them: MD5 16, SHA-1 20, SHA-256 and SHA3-256 32, SHA-512 64, CRC32 4. Written as hexadecimal that is twice as many characters (32, 40, 64, 128, 8). The tool reads your input as hexadecimal and as Base64 (standard and URL-safe, with the padding the format requires) and compares the decoded byte length with that table. Base64 is judged by decoded length, not text length: the MD5 digest of “password” is 32 hex characters but X03MO1qnZdYdgyfeuILPmQ== in Base64 (24 characters, 16 bytes).
That is why SHA-256 and SHA3-256 always appear together for a 64-character hex string: the shape is identical, so both are shown as “Possible format match” and neither is ranked above the other. Password-hash strings that carry their own markers (bcrypt $2a$/$2b$/$2y$, MD5-Crypt $1$, SHA-256-Crypt $5$, SHA-512-Crypt $6$) are checked against their full structure: prefix, salt alphabet and length, cost or rounds range and exact hash length. Only those are labelled “Likely format match”, and a string that merely starts like one of them is not labelled at all.
A format match is evidence about shape. It does not prove which algorithm produced the string, it cannot tell which software wrote it, and it does not cover every algorithm that exists. SHA-1 and MD5 are identified because they still turn up in old CTF material and legacy systems, not because they are suitable for new security-sensitive uses.
What the Wordlist Check Does
The check reads a list of candidate words, one per line, and for each word in file order computes the digest under every algorithm you selected, then compares it with yours. The order inside a word is fixed: MD5, SHA-1, SHA-256, SHA3-256, SHA-512, CRC32. With a single hash, the run stops at the first word and algorithm that match, following that order; it does not go on to look for further matches. For a batch, checking continues until every eligible hash has matched or the wordlist ends. Hashes that cannot be checked with the selected algorithms are reported separately as “Not checked”. The bundled list has 4,613 entries, version 1.0 (its count and version are read from the shipped file, not typed into this page), an optional extended pack has 44,945 entries, version 1.0, 335 KB, and you can upload your own list of up to 200,000 physical lines and 4 MiB.
A salt is added as plain text: salt before the word gives H(salt + word), salt after gives H(word + salt). Salt and word are UTF-8 exactly as written, with no separator and no trimming. That is the only salting this tool understands. It is not bcrypt, scrypt, Argon2 or PBKDF2, and CRC32 is never salted because a checksum is not a password hash.
Why Some Hashes Cannot Be Checked Here
bcrypt, MD5-Crypt and SHA-Crypt are slow, salted password-hashing schemes. They are built so that each guess costs real time, which is exactly what a browser check against a list of thousands of words cannot do usefully, so the tool identifies them and says so instead of pretending to try. This tool does not recognize or check scrypt, Argon2 or PBKDF2 formats.
The tool also never brute-forces, never applies rules to your words (no case changes, no leet substitutions) and never shows a guessing-speed or time-to-crack estimate. The result does report the elapsed time of the check you ran; that is a measurement of this run, not a prediction of how long recovering a password would take. It is a dictionary lookup against a list you can see and control.
What “No Match” Means
“No match in this wordlist for the algorithm(s) checked” says that none of the words in that list, hashed the way you asked, produced your digest. It does not say the hash is strong, that the algorithm is wrong, or that the word cannot be found some other way. A different list, a different salt position, or a different algorithm may match. A typical cause is that the hash was made with a salt or a different construction than plain hashing: sample D and sample E below have the same word and the same salt but differ in the position, and each matches only in its own position.
Using the Hash Identifier in a CTF
A typical sequence: pull a hash-looking string out of a file or capture (the Strings Analyzer lists them), paste it here, read which algorithms its length allows, then check the likeliest one against the bundled list. If the challenge text names the algorithm, put it in the hint field; it moves that algorithm to the top of the Identify list without hiding the others. It does not change the order the wordlist check uses, which is fixed (MD5, SHA-1, SHA-256, SHA3-256, SHA-512, CRC32) and depends only on the algorithms you tick on the Check tab. If the value will not identify, it may be wrapped in another encoding: the Identify tab flags a digest that is itself hexadecimal text, and the Encoding Auto-Decoder peels Base64, hex and URL layers.
If the plaintext is a word you can guess (a name, a flag-style word, a date), put your guesses in your own list and upload it; a short list you wrote is often more useful than a large generic one. If the challenge salts the hash by putting a fixed string before or after the password, enter that string and its position. If the hash is bcrypt or a crypt format, this tool only tells you what it is.
Supported Algorithms and Formats
Digest sizes come from the same table the identifier uses. “Checked” means the Check tab can test a wordlist against it; the other formats are identified only.
| Name | Digest size | Hex characters | Wordlist check | Notes |
|---|---|---|---|---|
| MD5 | 16 bytes | 32 | Yes | In-house implementation |
| SHA-1 | 20 bytes | 40 | Yes | Web Crypto in a worker |
| SHA-256 | 32 bytes | 64 | Yes | Web Crypto in a worker; same length as SHA3-256 |
| SHA3-256 | 32 bytes | 64 | Yes | In-house implementation; same length as SHA-256 |
| SHA-512 | 64 bytes | 128 | Yes | Web Crypto in a worker |
| CRC32 (CRC-32/ISO-HDLC) | 4 bytes | 8 | Yes, never salted | Checksum for error detection, in-house code, collisions are easy |
| bcrypt | — | 60 characters | No | $2a$, $2b$ or $2y$, cost 04–31, 22-character salt and 31-character hash |
| MD5-Crypt | — | — | No | $1$, salt of 0–8 characters, 22-character hash |
| SHA-256-Crypt | — | — | No | $5$, optional rounds=1000–999999999, salt of 0–16 characters, 43-character hash |
| SHA-512-Crypt | — | — | No | $6$, optional rounds=1000–999999999, salt of 0–16 characters, 86-character hash |
Inputs, Outputs and Limits
Every limit below is checked in code before work starts; none is silently truncated.
| Item | Limit or behaviour |
|---|---|
| Hash input | Hexadecimal (even number of digits), standard or URL-safe Base64 with padding, or a $-prefixed password hash; at most 1,024 UTF-8 bytes after trimming |
| Batch | One hash per line, up to 1,000 non-empty lines, one algorithm selection and one salt setting for all lines |
| Salt | Up to 256 UTF-8 bytes, added before or after each word with no separator; never used with CRC32 |
| Uploaded wordlist | Up to 4,194,304 bytes (4 MiB) and 200,000 physical lines; valid UTF-8 only; lines over 256 bytes are skipped and counted |
| Bundled list | 4,613 entries, version 1.0 (the shipped list never exceeds 10,000 entries) |
| Extended pack | 44,945 entries, version 1.0, 335 KB; downloaded from this site and checked against its recorded size and SHA-256 before use |
| Check result | Match found (algorithm, candidate word, salt and position, wordlist, words processed), No match (words checked, elapsed time), Cancelled, or an error |
| Export | CSV or TXT of every line: line number, hash, algorithm, result, candidate word, wordlist, salt, salt position |
Examples
Input: 5f4dcc3b5aa765d61d8327deb882cf99 (sample A)
Result: Identify: MD5, “Possible format match”, 32 hexadecimal characters. Check with MD5 against the bundled list: Match found, candidate word “password”.
Meaning: A short, famous weak password is in the list. The same word under SHA-1 is sample C.
Input: a721e1847515b460ba03fc9d8535945d (sample D), MD5, salt ab12
Result: Salt before candidate: match, “password” (H(ab12 + password)). Salt after candidate: no match.
Meaning: Salt position matters. The wrong direction is never silently accepted.
Input: 4d63bbe0361fa46b5faeb03642317d2b (sample E), MD5, salt ab12
Result: Salt after candidate: match, “password” (H(password + ab12)). The same hash with the salt before: no match.
Meaning: Same word and salt as D, different digest.
Input: 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
Result: Two candidates in the same group: SHA-256 and SHA3-256, both “Possible format match”, both for “64 hexadecimal characters”. Checking SHA-256 finds “password”; checking SHA3-256 on the same value finds nothing.
Meaning: The shape cannot tell them apart. A wordlist check can provide evidence when a candidate matches, while the hint field only moves your expected algorithm higher in the Identify list.
Input: X03MO1qnZdYdgyfeuILPmQ== (sample G)
Result: Read as Base64: 16 bytes, MD5. The digest bytes equal those of 5f4dcc3b5aa765d61d8327deb882cf99 and the check finds “password”. Removing the last = (sample H) is rejected as invalid Base64, not repaired.
Meaning: Base64 is compared by decoded bytes. The same 24-character string is not read as 24 bytes of anything else.
Input: 35c246d5
Result: CRC32 (CRC-32/ISO-HDLC), shown under checksums with the note that it is not a secure hash. A check finds “password” and adds the disclaimer that a checksum match does not prove it was the original input.
Meaning: Eight hex digits is a checksum, not a password hash; collisions are easy.
Input: $2a$12$ followed by 53 valid characters
Result: bcrypt, variant $2a$, cost 12, “Likely format match”, no Check button and the slow-hash notice. $2a$12$tooshort is not labelled as anything.
Meaning: Full structure is checked, a prefix alone is not enough.
How it works
1. Read the input
The trimmed input must be at most 1,024 UTF-8 bytes; that is checked first, before any pattern matching runs. It is then read as hexadecimal (even digit count) and as Base64 (standard or URL-safe alphabet, required padding, and a canonical round trip: decode, re-encode, compare). A string valid in both readings is shown under both, each with its own result or its own “No recognised format” line.
2. Match the format
Digest lengths are compared with a fixed table of six algorithms. Password-hash strings are validated structurally. Nothing is looked up online and no database of known hashes is consulted.
3. Read the wordlist
A file is checked for size first (4 MiB), then decoded as strict UTF-8 (a bad byte rejects the whole file), then split on LF, CRLF and lone CR only. Vertical tab, form feed, NEL and the Unicode line separators stay inside a line. Empty lines and lines over 256 UTF-8 bytes are skipped and counted; spaces, case and duplicates are kept.
4. Hash and compare in a worker
SHA-1, SHA-256 and SHA-512 use your browser's Web Crypto. MD5, SHA3-256 and CRC32 are implemented in this page's own code, because Web Crypto has none of them. Progress counts words, not digests. Cancel terminates the worker immediately, so a stopped run cannot show a late result.
5. Show the result
A match lists the algorithm, the candidate word, the salt and its position, the wordlist and how many words were processed. Output is drawn as plain text and the word is never interpreted as markup.
What the results mean
| Result | What it means | What to do |
|---|---|---|
| Possible format match | The digest length (and nothing else) fits this algorithm. | Treat it as a lead. Use the hint field or the source of the hash to choose. |
| Likely format match | A password-hash string passed its full structural check (bcrypt, MD5-Crypt, SHA-Crypt). | Not checkable here; use a dedicated offline tool on data you are authorised to test. |
| Match found | A word in the list produces your digest under the chosen algorithm and salt. | Confirm it makes sense in your challenge. For CRC32 it is only a checksum match. |
| No match in this wordlist | No word in the list that was checked produces the digest. | Try another list, the other salt position, or another algorithm with the same length. |
| Cancelled | You stopped the run, so the list was not fully checked. | Not a match and not a “no match”. Run it again. |
| No recognised format | Neither hexadecimal, Base64 nor a known password-hash structure matched. | Check for stray characters, a missing prefix or a different encoding layer. |
| Wordlist rejected | The file was too large, had too many lines or was not valid UTF-8. | Save it as UTF-8 text, one word per line, within 200,000 lines and 4 MiB. |
| Not checked (batch) | That line's digest length does not fit the selected algorithm(s), or it is a slow password-hash format. | Select the algorithm that fits it, or remove the line. |
Limitations
- Identification looks at length and structure only. It cannot tell SHA-256 from SHA3-256, or MD5 from any other 16-byte value, and it does not cover algorithms outside its table (for example NTLM, MySQL or SHA-384).
- Only MD5, SHA-1, SHA-256, SHA3-256, SHA-512 and CRC32 can be checked. bcrypt, MD5-Crypt and SHA-Crypt are identified but never checked; scrypt, Argon2 and PBKDF2 are not identified.
- Only simple salt-before-word and salt-after-word concatenation is supported, with a salt of at most 256 UTF-8 bytes. Other salting constructions (for example PHPass, or a separator between salt and word) are not.
- It is a dictionary lookup, not a brute-force search: no character-set permutations, masks or rules are tried, so a word that is not in your list is never found.
- The bundled list has 4,613 entries, version 1.0; the extended pack 44,945 entries, version 1.0, 335 KB. They are small lists of common words, not real password databases. An uploaded list is limited to 200,000 physical lines, 4 MiB and 256 bytes per line.
- CRC32 means CRC-32/ISO-HDLC only (zip, PNG, zlib). Other CRC-32 variants and other CRC widths are not recognised, and a CRC32 match does not prove the original input.
- The wordlist limits are design limits. Run time grows with the list size and your device; the tool reports elapsed time for the completed check but does not show guessing-speed or time-to-crack estimates. Phones with little memory may struggle with the largest lists.
- Hashes, salts and wordlists are processed locally by this tool. This statement is about this tool's own code; it does not cover third-party scripts loaded on the page.
- Use it only on data you created or are authorised to test, such as a CTF challenge or your own practice files.
Privacy
Hashes, salts and wordlists are processed locally by this tool. The tool does not intentionally transmit these values or include them in analytics events: what you type is never put in the page address, analytics events carry feature names only (such as identify or wordlist check), and results are rendered as plain text. This statement is about this tool's own code; it does not cover third-party scripts, and a browser page cannot fully prevent other scripts on the same page from reading it. Optional analytics and advertising scripts load only after you accept optional cookies. An uploaded wordlist is read locally and never uploaded. The optional extended wordlist pack is a fixed file downloaded from this site; the request carries nothing you entered. If you use Send to another tool, the candidate word is stored in your browser's IndexedDB so the next page can read it; it is not sent to a server, the next page ignores it after 30 minutes and a newer transfer replaces it. Deleting it when you close the tab is not guaranteed. Only your pinned result tabs are remembered in localStorage — never a hash, salt, wordlist or result. Reloading the page restores nothing.
Frequently Asked Questions
What is a hash identifier and how does it work?
A hash identifier looks at a string and lists the algorithms whose output could have that shape. This one reads your input as hexadecimal and as Base64, compares the decoded byte length with MD5 (16), SHA-1 (20), SHA-256 and SHA3-256 (32), SHA-512 (64) and CRC32 (4), and validates bcrypt and the crypt formats ($1$, $5$, $6$) against their full structure. It uses no online lookup.
Can this tool tell me the hash algorithm for certain?
No. A format match is evidence about shape, not proof. Several algorithms share a length, so every length-only match is labelled “Possible format match”; only a password-hash string that passes a full structural check is labelled “Likely format match”. The source of the hash can provide additional context. The optional hint field only reorders the Identify list; it does not verify the algorithm.
What is a hash cracker, and why doesn't this tool do general cracking?
A hash cracker tries many guesses until one produces the target digest, usually with large wordlists, rules or brute force and often on a GPU. This tool is deliberately smaller: it checks a hash against a list of words you can see and control. It does not brute-force, apply rules, attack slow password hashes or show time-to-crack figures.
Why can't bcrypt or other salted hashes be checked here?
bcrypt, MD5-Crypt and SHA-Crypt are slow, salted password-hashing schemes made so that each guess is expensive. Checking them against a wordlist in a browser would be too slow to be useful, so the tool identifies them and says so. Simple salt-before or salt-after concatenation for the fast hashes is supported; that is a different, much simpler construction.
What's the difference between the bundled wordlist and my own uploaded wordlist?
The bundled list is a small fixed list of common words and well-known weak strings that ships with the page (4,613 entries, version 1.0; the number shown on the Check tab is read from the file). An uploaded list is a plain-text file you provide, read and used only in your browser. There is also an optional extended pack (44,945 entries, version 1.0, 335 KB) you can download from this site.
How big can my uploaded wordlist be?
Up to 4 MiB (4,194,304 bytes) and 200,000 physical lines, whichever is reached first, with at most 256 UTF-8 bytes per line (longer lines are skipped and counted). The file must be valid UTF-8; LF, CRLF and lone CR are accepted as line endings. The Check tab shows physical lines, empty lines skipped, oversized lines skipped and eligible entries before you start.
What does “no match” actually mean?
That no word in the list you checked produced the digest under the algorithm(s) and salt you chose. It does not mean the hash is secure or that the plaintext cannot be found. Try a different list, the other salt position or another algorithm of the same length.
How does the salt prefix/suffix option work?
With the salt before the word the tool hashes salt + word; with the salt after it hashes word + salt. Both are UTF-8 bytes joined with nothing in between, exactly as typed. Samples D and E use the same word and salt but differ in position, so each matches only in its own position.
Why do SHA-256 and SHA3-256 look the same length?
Both produce a 256-bit (32-byte) digest, which is 64 hexadecimal characters. They are different algorithms, so the same input gives different digests, but nothing in the length separates them. Both are listed, equally labelled, and the check tells you which one matches.
Is my hash or wordlist uploaded anywhere?
Hashes, salts and wordlists are processed locally by this tool. The tool does not intentionally transmit these values or include them in analytics events; analytics carries feature names only. Third-party scripts loaded elsewhere on the page are outside this tool's processing boundary. The optional extended pack is a fixed file downloaded from this site; nothing you typed is sent with that request.
Can I use this on hashes I don't own?
Use it only on data you created or are authorised to test, such as a CTF challenge or your own practice files. The tool cannot verify who a hash belongs to, so the responsibility is yours, and it gives no guidance for attacking real accounts or systems.
How is this different from a hash generator?
A hash generator computes a digest from text you type. This tool starts from a digest: it identifies what it could be and checks whether any word in a list produces it. It does not generate hashes from text.
What's CRC32 and why is it included alongside cryptographic hashes?
CRC32 is a 32-bit checksum used for error detection in zip files, PNG and network frames. It is not a secure hash and collisions are easy, so a CRC32 match does not prove the original input. It is included because 8-hex-digit values turn up in CTF files; this tool supports CRC-32/ISO-HDLC only, and never salts it.
Can I check many hashes at once?
Yes. Switch the Input tab to Batch and paste one hash per line (up to 1,000). All lines are checked against one wordlist with the same algorithm selection and salt setting; a line that does not fit is reported as “Not checked” with the reason. Results export as CSV or TXT.
Related Tools
Encoding Auto-Decoder
Peel Base64, hex and URL layers before a hash is exposed
Hex Viewer / Editor
Inspect the raw bytes of a file that contains a hash
Strings Analyzer
Find hash-looking strings in a binary
Number Base Converter
Convert a digest or checksum between bases
XOR Brute Forcer
For values that are XOR-obfuscated rather than hashed
CTF Lab
All forensics, encoding and steganography tools