What a bit of entropy buys
Entropy measures how many guesses an attacker needs, expressed as a power of two. An alphabet of N characters over a length of L gives L × log2N bits, and every extra bit doubles the work. Eight lowercase letters is 8 × 4.7 ≈ 38 bits. Twelve is 56. Sixteen is 75.
Compare that against the character-class approach. Adding uppercase, digits and symbols to a lowercase alphabet takes you from 4.7 bits per character to about 6.6 — worth roughly two characters of extra length, once, no matter how long the password is. Length compounds; the alphabet does not. This is the whole argument for passphrases, and it is why the composition rules that demand one of each type produce weak passwords: people satisfy them with Password1! rather than by making anything longer.
The catch is that the formula assumes uniform random choice, and people do not choose uniformly. Password1! scores 66 bits on the raw arithmetic and dies in seconds in reality, because it is one dictionary word plus two rules that every cracking tool applies by default. So this tool starts from the arithmetic and then deducts for each pattern it recognises. That is the same idea as Dropbox's zxcvbn, in a much simpler form: zxcvbn matches against multiple frequency-ranked wordlists, l33t substitutions, dates, keyboard geometry and repeats, and searches for the cheapest way to decompose the password. If you need a real estimator in a signup form, use zxcvbn rather than reimplementing this.
The two attack speeds, and why they differ so much
Guessing at a login form is slow. The server rate-limits, locks accounts, adds delays, and notices. A thousand attempts per second is generous for that setting, and against a well-run service it is wildly optimistic.
Once a password database leaks, the arithmetic changes completely. The attacker has the hashes on their own hardware with no rate limit at all, and the speed depends entirely on how those hashes were made. Unsalted MD5 or SHA-1 runs at tens of billions of guesses per second on consumer GPUs. bcrypt with a sensible work factor runs at tens of thousands. Argon2id with real memory cost runs slower still, and the memory requirement is what makes GPU parallelism expensive rather than just slow.
The offline figure here assumes 1010 per second — a fast hash, which is the pessimistic case and the one worth planning for, since you have no say in how any given site stored your password. It also assumes an average of half the search space, and it assumes brute force. A real attack starts with breach lists and rule-mangled dictionaries, so anything with a human shape falls far earlier than the number implies.
Patterns that cost more than they look
| Pattern | Example | Why it is cheap to guess |
|---|---|---|
| Breach-list word | letmein | Tried in list order, within the first few thousand guesses |
| Word plus digits | dragon2024 | Standard mangling rule appended to every dictionary entry |
| Capital first, symbol last | Sunshine! | The shape composition rules force, so it is generated first |
| Keyboard run | qwerty, 1qaz2wsx | Generated from keyboard geometry, not enumerated character by character |
| Repeat block | abcabcabc | Guess the block, then the repeat count — two small numbers, not nine characters |
| Date | 15031992 | Small space, and often discoverable from public sources |
| Leetspeak | p@ssw0rd | Substitution rules are built into every tool and cost nothing to apply |
The thing this score cannot measure
Every password on this page is scored in isolation, and that is the wrong unit. The dominant way accounts are lost is not guessing at all — it is credential stuffing: a password leaks from one site, and it is replayed against every other service until something opens. A 100-bit password reused across ten sites offers no protection against this whatsoever, and the meter will happily call it very strong.
So the strength question is second-order. First make every password unique, which in practice means a password manager generating random strings you never see, with one long passphrase protecting the vault. Then turn on a second factor wherever it exists, because it is what saves the account when the password leaks anyway. Forced rotation every ninety days, meanwhile, was dropped from the NIST guidance years ago for the obvious reason: it produces Spring2024! followed by Summer2024!. Change a password when there is a reason to think it is exposed, and otherwise leave a good one alone.
Questions people ask
Is what I type here sent anywhere?
No. The page is static and the scoring is JavaScript running on your machine — you can watch the network tab stay empty while you type, and nothing is written to storage. Even so, treat any box on any site that asks for a password as one you should not put a real one into. Type something with the same shape and length instead; the score will be the same and the habit is the one that protects you elsewhere.
A different site gave my password a different score.
Different meters use different pattern libraries and different assumptions about attack speed, so the numbers are not comparable and none of them is authoritative. What transfers between tools is the list of weaknesses. If a meter names a dictionary word or a keyboard run in your password, that finding is real regardless of the score attached to it.
Does a "very strong" rating mean the account is safe?
No. It means a brute-force attack against this particular string, under one model of how guessing proceeds, would take a long time. It says nothing about reuse, phishing, malware on your machine, or the site storing passwords badly. Strength is one input among several, and it is not the one that most often fails.
Passphrase or random string?
Both work; they solve different problems. A random string from a password manager is stronger per character and you never need to remember it. A passphrase of four or five unrelated words — chosen randomly, not composed by you, and not from a quotation or lyrics — lands around 50 to 65 bits and can be typed from memory. The sensible arrangement is a passphrase for the handful you must type yourself, starting with the manager's master password and your device login, and random strings for everything else.