About the Bcrypt Tester
Verify whether a plain text password matches a bcrypt hash. It's the inverse of the generator: extremely useful for debugging logins, recovering access in test environments, and validating passwords without resetting the database. All verification happens locally, with nothing sent to any server. To generate bcrypt hashes, use our Hash Generator.
How to verify in 3 steps
- 1Paste the original password in the first field.
- 2Paste the bcrypt hash (60 characters, starting with
$2a$,$2b$, or$2y$). - 3The result shows up on its own: see whether the text matches the hash and the hash's parts.
Structure of a bcrypt hash
A bcrypt hash has 60 characters split into four parts separated by $.
| Part | Example | Meaning |
|---|---|---|
| Version | $2b$ | Identifies the variant (2a, 2b, or 2y) |
| Cost | 10$ | Number of rounds (computational cost) |
| Salt | 22 characters | Random sequence embedded in the hash |
| Hash | 31 characters | Result of bcrypt applied to the text + salt |
Use cases by framework
The bcrypt algorithm is standardized, so hashes generated by the frameworks below follow the same format and can be verified here without any conversion.
| Framework / language | Generation | Verification |
|---|---|---|
| Laravel (PHP) | Hash::make($plain) | Hash::check($plain, $hash) |
| Node.js (bcrypt / bcryptjs) | bcrypt.hash(plain, rounds) | bcrypt.compare(plain, hash) |
| Python (passlib / bcrypt) | bcrypt.hashpw(plain, salt) | bcrypt.checkpw(plain, hash) |
| Spring Security (Java) | encoder.encode(plain) | encoder.matches(plain, hash) |
| Django (Python) | make_password(plain) | check_password(plain, hash) |
| Ruby (bcrypt-ruby) | BCrypt::Password.create(plain) | password == plain |