Skip to content
shellhacks.dev

Hash Type Identifier

Paste a hash and find out what produced it: bcrypt and its cost, Argon2 and its parameters, crypt formats from /etc/shadow, MySQL and PostgreSQL password hashes, or a plain digest by length.

Free · No sign-up · Your inputs stay in your browser

Input

Identify a hash by its format

Output

bcrypt

bcrypt

60 characters

Cost factor 12 (2^12 rounds). PHP's password_hash() default and Laravel's Hash::make(). y$ is PHP's marker; b$ is the same algorithm elsewhere.

Identified by prefix, alphabet and length only, so a bare 64-character hex string could be any 256-bit hash. Modular-crypt strings ($2y$, $argon2id$, $6$) name their algorithm and parameters, which is why password_hash() output can be verified without knowing how it was made.

Runs in this browser. Nothing you paste is sent to a server.

Self-describing hashes

Password hashes from password_hash(), crypt() and Argon2 carry their own algorithm and parameters: $2y$12$ is bcrypt at cost 12, and $argon2id$v=19$m=65536,t=4,p=1$ spells out memory, iterations and parallelism. That is why password_verify() needs no hint, and why password_needs_rehash() can tell when a stored hash is weaker than the current setting.

Bare digests are ambiguous

A 64-character hex string is 256 bits, which could be SHA-256, SHA3-256 or BLAKE2s. Only the system that produced it knows. If you find a bare fast hash in a users table, the passwords need migrating: rehash each one with bcrypt or Argon2 at the user's next login.

Share

Frequently asked questions

What does $2y$ mean at the start of a hash?
It is bcrypt as produced by PHP. The number after it is the cost: $2y$12$ means 2^12 rounds.
Can this tool crack or reverse a hash?
No. It only identifies the format from its structure and length.
Is what I paste sent anywhere?
No. The tool runs entirely in your browser with JavaScript. Nothing you type or paste is sent to our server or stored.

Go deeper

Suggested reading

Keep planning

Similar tools