DevTools Hub

Search tools

Search for a developer tool

Hashing

Password Hash Inspector

Identify and decode a bcrypt, Argon2, SHA-256, or MD5 password hash.

Part of the Hashing Toolkit
Argon2
  • Argon2id is a hybrid of Argon2i (side-channel resistant) and Argon2d (GPU-cracking resistant) — OWASP recommends it specifically for password hashing, so this is the preferred variant.
  • Memory cost is 19,456 KiB (19.0 MiB), at or above OWASP's lowest documented profile (12,288 KiB).
Variant
argon2id
Version
19 (0x13)
Memory (m)
19,456 KiB
Iterations (t)
2
Parallelism (p)
1
Salt (base64, 16 bytes)
0MTssXOte5titeUO8TX5lQ
Hash (base64, 32 bytes)
mkBB6FIvn0R7wHiT+Y8bquCLK9lm2eQQXmUXNnIAnKk

Test a password against this hash

What this tool does

Paste a hash you found somewhere — a database dump, a config file, a leaked credentials list — and this identifies whether it's bcrypt, Argon2, SHA-256, or MD5, then breaks it down into its actual parts: cost factor, salt, memory/iteration settings, whatever the format embeds. It also flags anything worth knowing about that specific hash, like a cost factor below current recommendations or a format with a documented historical bug.

Why bcrypt and Argon2 hashes can be decomposed, but SHA-256 and MD5 can't

bcrypt and Argon2 hashes are self-describing: the encoded string is a structured format that embeds the algorithm version, cost parameters, and salt alongside the hash output itself — that's exactly what makes it possible to verify a password against one without storing the parameters separately. A bare SHA-256 or MD5 hash, by contrast, is just the raw digest — 64 or 32 hex characters with nothing else encoded in it. There's no salt to extract because (unless the application added one before hashing and stored it elsewhere) there usually isn't one, which is exactly why a bare hash like this is a weak way to store a password in the first place.

The bcrypt version prefix ($2a$, $2b$, $2x$, $2y$)

bcrypt's prefix has changed a few times, each time chasing a bug rather than changing the algorithm itself. The original $2$ handled non-ASCII passwords badly and was replaced by $2a$ in 1997. In 2011, a bug in PHP's bcrypt implementation mishandled password bytes above 127 — hashes from the broken code got tagged $2x$, and the fixed code got $2y$. In 2014, OpenBSD found a separate bug in their own implementation where an 8-bit length variable made passwords of 256+ bytes wrap around; they introduced $2b$ to mark the fix. For any password under 72 bytes — which is all of them, since bcrypt truncates there anyway — $2a$, $2b$, and $2y$ all produce identical output. Only $2x$ hashes are genuinely suspect.

FAQ

Is my hash or password uploaded anywhere?

No — parsing, inspection, and the optional password check all run entirely in your browser.

I have a password and want to generate one of these hashes instead of inspecting one — where's that?

That's Password Hash Generator, a separate tool on this site for building bcrypt, scrypt, Argon2, and PBKDF2 hashes from scratch with configurable parameters.

This flagged my bcrypt hash's cost factor as too low — what should it actually be?

There's no single right number beyond OWASP's minimum of 10 — it depends on how much latency your server can tolerate. Bcrypt Cost Calculator benchmarks real bcrypt hashing time at increasing cost factors and helps you pick one for a target time.

Why does this tool flag SHA-256 and MD5 as insecure, when SHA-256 itself isn't broken?

SHA-256 as a hash function is not broken — it's exactly what it should be: fast and collision-resistant. That speed is the problem for password storage specifically. A general-purpose fast hash lets an attacker with a stolen database try billions of candidate passwords per second on a GPU; a deliberately slow, memory-hard function like bcrypt or Argon2 cuts that down by orders of magnitude. MD5 has that same speed problem and is separately broken for collision resistance, which is a different, additional issue. See Password Hashing Explained for the full comparison.

What if I paste a SHA-1 or SHA-512 hash?

This tool specifically targets bcrypt, Argon2, SHA-256, and MD5. A 40-character hex string (SHA-1) or 128-character one (SHA-512) will be flagged as unrecognized here — use Hash Verifier, which auto-detects across all four common general-purpose hash lengths.

Related tools