Does this password match this hash?
Paste a bcrypt hash and the password you want to test. The comparison runs in this tab, the same way your login endpoint would run it, and nothing is sent anywhere.
Everything here runs locally
How verification actually works
There is no decryption step. bcrypt reads the version, cost and salt out of the stored string, hashes your candidate password with those exact settings, and compares the two digests. Same input plus same salt gives the same output, so a match proves the password without the hash ever having contained it.
That comparison should be constant time in real code, which is what every library's compare function gives you. Writing it yourself with a plain equality check leaks timing information about how much of the digest lined up.
$2b$12$R9h/cIPz0gi.URNNX3kh2O PST9/PgBkqquzi.Ss7KIUgO2t0jWMUW
└┬┘ └┬┘ └──────────┬─────────┘ └──────────────┬──────────────┘
│ │ │ │
│ │ │ the digest to compare against
│ │ the salt, reused for your candidate
│ the cost, so the work matches
the versionThe same check in your own code
Node.js
const ok = await bcrypt.compare(candidate, user.passwordHash);PHP
if (password_verify($candidate, $user['password_hash'])) { }Python
bcrypt.checkpw(candidate.encode(), stored_hash)Go
err := bcrypt.CompareHashAndPassword(storedHash, []byte(candidate))Spring Security
encoder.matches(candidate, storedHash)