Password Strength Checker — Entropy, Crack Time, and HIBP Breach Lookup
Analyze password strength free in your browser: entropy in bits, estimated crack time under four attack scenarios (online throttled/unthrottled, offline GPU fast hash, offline bcrypt slow hash), and structural findings (dictionary words, keyboard sequences, repeated patterns). Optional k-anonymous Have I Been Pwned check — no signup, your password never leaves the tab.
Last updated:
CommentsType a password to see its entropy in bits, estimated crack time under four attack scenarios, and a breakdown of what's making it strong or weak. Optionally check whether it's appeared in known breaches. Everything runs locally — the password is never sent anywhere.
Strength analysis runs entirely in your browser. Nothing is sent to any server unless you explicitly click the “Check breaches” button (which uses the Have I Been Pwned k-anonymity API — only the first 5 characters of the SHA-1 hash are sent, never the password itself).
- Contains a well-known weak word: "p@ssw0rd".
- Uses all 4 character classes (lower, upper, digit, symbol).
Need to generate a strong password? Password Generator creates cryptographically random passwords with configurable length and character classes.
What is Password Strength?
A password strength checker measures how hard your password would be to guess. Naive checkers just count characters and character classes; serious ones (this tool included) model real attacker behavior: dictionary words, keyboard patterns, l33t substitutions, and repeated tokens. The result is expressed as entropy (bits) and cracker time under offline vs. online, fast-hash vs. slow-hash scenarios.
How to check a password
- 1Type or paste the password into the input. Toggle the eye icon if you want to verify what you typed.
- 2Read the entropy (in bits): 60+ is fine for most sites, 80+ is strong, 128+ is overkill except for master passwords.
- 3Scan the four crack-time estimates — online throttled (10/hr), online unthrottled (10/sec), offline GPU fast hash (10¹⁰/sec), offline bcrypt slow hash (10/sec).
- 4Optionally click 'Check breach database' — the tool sends only the first 5 chars of the SHA-1 hash to Have I Been Pwned (k-anonymity, RFC-style) and compares locally.
- 5Fix any listed weaknesses (dictionary words, keyboard walks, low character variety) and try again.
Use Cases
Validate a chosen master password
For your password manager, disk encryption, or GPG key, aim for 128+ bits of entropy — this tool tells you whether the passphrase you picked meets that bar.
Enforce policy in a signup form
Reference implementation for a client-side strength meter. Copy the logic (zxcvbn-style) rather than counting characters, which produces false positives (`Password1!` looks strong to a length-and-class rule).
Audit an existing password
Paste an old password you're still using in some low-value account to see how hopeless it would be against a modern attacker. Spoiler: `Summer2024!` cracks in seconds.
Compare passphrase strategies
Test a 4-word Diceware passphrase (`correct-horse-battery-staple`) vs. a 12-char random string. See which reaches your entropy target with fewer keystrokes.
Code Examples
Compute password entropy
// Entropy of a password from a known-size alphabet:
// bits = length * log2(alphabet_size)
const alphabet = 26 * 2 + 10 + 32; // upper + lower + digits + symbols
const bits = password.length * Math.log2(alphabet);Check against HIBP (k-anonymity)
const hash = await sha1(password); // hex, uppercase
const prefix = hash.slice(0, 5);
const suffix = hash.slice(5);
const res = await fetch("https://api.pwnedpasswords.com/range/" + prefix);
const body = await res.text();
const hit = body.split("\n").find(l => l.startsWith(suffix));
const count = hit ? Number(hit.split(":")[1]) : 0;Use zxcvbn in Python
from zxcvbn import zxcvbn
result = zxcvbn("Summer2024!")
print(result["score"]) # 0-4 crack difficulty
print(result["crack_times_display"]) # human-readable estimatesKey Concepts
- Entropy
- Measured in bits. Each additional bit doubles the guess-space. A truly random 8-char password from a 94-char alphabet has ~52 bits. Human-chosen passwords typically have far less because we pick predictable patterns.
- Fast hash vs. slow hash
- Fast hashes (MD5, SHA-1, SHA-256) let a GPU test 10¹⁰ guesses/sec. Slow hashes (bcrypt, scrypt, Argon2) deliberately cap at ~10-100/sec even on GPUs — turning a 2-day crack into 5000 years. If a site leaks a fast-hashed password DB, your password needs to be much stronger than if it were bcrypted.
- Have I Been Pwned (HIBP)
- A public database of ~800M passwords from historical breaches. Any password that appears here is 'known' to attackers — they'll try it first regardless of how strong it looks. The k-anonymity API lets you check without ever sending the full hash.
- Dictionary attack
- Instead of brute-forcing all combinations, an attacker tries a wordlist of leaked passwords, English words, names, dates, and their variants (`Password!` → `P@ssw0rd!` etc.). `Sunshine123` has 60+ bits of naïve entropy but is cracked in milliseconds by any real attacker.
Tips & Best Practices
- ▸Length beats complexity. `correcthorsebatterystaple` has more entropy than `P@$$w0rd!` even though the latter uses more character classes.
- ▸Never reuse a password across sites. When one gets breached, credential-stuffing attacks try it on everything you've ever signed up for.
- ▸Use a password manager. Store one strong master passphrase (128+ bits, memorize it), let the manager generate 20-char random passwords for everything else.
- ▸For truly high-value accounts (bank, email, password manager itself), add a hardware security key (FIDO2 / WebAuthn). Even a leaked password can't be used without physical possession.
Frequently Asked Questions
How does this tool score my password?
Three passes: (1) A character-pool entropy estimate — length × log2(pool size), where pool depends on which of lowercase/uppercase/digits/symbols you used. (2) Structural penalties — being a well-known weak password (like 'password123'), containing a keyboard sequence (qwerty, 1234, abcdef), being all-digits, or repeated patterns like 'abcabc' subtract entropy. (3) Positive findings for length and character-class diversity. The final 0–4 score maps to Very weak / Weak / Strong / Very strong.
What do the four crack-time rows mean?
They model different attacker capabilities. (a) Online throttled: guessing against your login form with rate limits (~10/s). (b) Online unthrottled: same but no rate limits (~100/s). (c) Offline fast hash: attacker has stolen a password database hashed with something fast like SHA-1 or unsalted MD5, using a GPU cluster (~10 billion tries/s). (d) Offline slow hash: attacker has a bcrypt/scrypt/Argon2 database (~10k tries/s per GPU). If (d) is still centuries, you're in great shape.
Is my password ever sent to any server?
Not for the strength analysis — everything runs locally. The only time any data leaves your browser is if you explicitly click 'Check breaches', which uses the Have I Been Pwned k-anonymity API: your password is SHA-1 hashed locally, and only the first 5 hex chars of the hash are sent. HIBP returns all matching hash suffixes and the comparison happens locally. Your actual password never touches the network.
What is the HIBP k-anonymity check?
Have I Been Pwned (haveibeenpwned.com) maintains a database of ~800 million passwords found in public breaches. The k-anonymity API is a privacy-preserving query: you send only the first 5 characters of your password's SHA-1 hash (a prefix that matches ~450 hashes on average), and the server sends back all matching hash suffixes along with breach counts. You do the final comparison locally. The server never learns your password.
My password scored 'Very strong' but showed up in HIBP. What now?
Rotate it immediately. Even a 20-character mixed-case password with symbols has zero real-world security if it's on attackers' pre-computed wordlists — they'll try it before doing any brute-force work. Uniqueness beats theoretical entropy every time. Use our Password Generator to make a fresh one and store it in a password manager.
Why doesn't this tool use zxcvbn?
zxcvbn (Dropbox's popular strength library) is excellent but ~400KB gzipped — that's more than the entire rest of this site's JavaScript. We use a lighter approach: keyboard-sequence detection, common-password check, repeated-pattern detection, plus the character-pool entropy formula. Not quite as sharp as zxcvbn on obscure patterns, but catches 95% of the meaningfully bad choices at 1% of the size.
Try Next
AES Encrypt / Decrypt
Encrypt and decrypt text with AES (128 / 192 / 256, GCM authenticated or CBC legacy) using a password. PBKDF2 key derivation with 200,000 iterations. 100% local — the Web Crypto API runs entirely in your browser.
Related Tools
Hash Generator
Generate MD5, SHA-1, SHA-256, and SHA-512 hashes of any text online. Free, no signup — all hashing runs entirely in your browser via the Web Crypto API, so nothing is uploaded.
HMAC Generator
Compute HMAC signatures with SHA-1, SHA-256, SHA-384, or SHA-512 online. Verify API requests, sign webhooks, and authenticate messages. Free, no signup — signing runs locally via the Web Crypto API, secrets never leave your browser.
JWT Decoder
Decode JSON Web Tokens (JWT) to inspect the header, payload, and signature. Runs entirely in your browser — tokens are never sent to any server.
Bcrypt Generator
Generate and verify bcrypt password hashes online. Configurable cost factor (4–15), shows computation time so you can pick a cost matching your server hardware. Parses and displays hash version and cost from any pasted hash. 100% local — passwords never leave your browser.
HMAC-SHA1
Compute HMAC-SHA1 signatures with any secret key. Outputs hex, base64, and base64url. Still used by OAuth 1.0, AWS S3 signature v2, and some older webhook schemes. 100% local via Web Crypto API.
OTP Generator
Generate time-based one-time passwords (TOTP RFC 6238) from a Base32 secret. Real-time counter with 30-second expiry. Perfect for 2FA testing and authenticator app debugging. 100% local.