We rated the most common leaked passwords with our own strength meter
The estimator on this site, like most password crack-time calculators, scores a password by its length and the kinds of characters in it. We ran it over the 755,994 most frequently used passwords in a public leak list. It rated 204,232 of them (27.0%) Reasonable or better, and 13,509 (1.8%) Strong or Very strong. Every one of them is in a list anyone can download, so an attacker tries them before any brute force starts: against bcrypt at cost 12, the whole list takes one RTX 5090 about 5.3 minutes per stolen hash.
This is a known problem, measured again
That length-and-character-set meters overrate real passwords is not news. Xavier de Carné de Carnavalet and Mohammad Mannan showed it across commercial meters in "From Very Weak to Very Strong: Analyzing Password-Strength Meters" (NDSS 2014), and Dropbox's zxcvbn estimator (Daniel Lowe Wheeler, USENIX Security 2016) was built to fix it by checking dictionaries and patterns. What this page adds is a current, reproducible measurement of one specific meter, ours, against one public list, with the scripts and data published so anyone can check it.
What we measured
The estimator computes entropy as length × log₂(character-set size), counting 26 for lowercase, 26 for uppercase, 10 for digits and 33 for symbols when any of each appears. It labels the result: under 28 bits Very weak, under 40 Weak, under 60 Reasonable, under 80 Strong, and Very strong above that. That model answers one question well: how long would a password take to find if the attacker had to try every combination of its characters?
Attackers do not start there. They start with passwords other people have already used, in order of popularity. The list we used is the xato-net list in SecLists, built from Mark Burnett's 2015 public release of 10 million username and password pairs and sorted by how often each password occurs. A password's rank on it is, roughly, the number of guesses a dictionary attack needs to reach it.
The analysis script lists four questions in its header: what share of the list the estimator rates Reasonable or better and Strong or better; the same split by rank; how far its time estimate sits from the dictionary attack; and how it rates passwords that meet a typical complexity policy. The correction above changed which entries count, not the questions.
xato-net list (SecLists), ranked entries only, scored with the crack-time.tools estimator
Show as a table
| Label | Passwords | Share |
|---|---|---|
| Very weak | 201,943 | 26.7% |
| Weak | 349,819 | 46.3% |
| Reasonable | 190,723 | 25.2% |
| Strong | 12,276 | 1.6% |
| Very strong | 1,233 | 0.2% |
| Total | 755,994 | 100% |
The labels and the guess counts fail in different places
Near the top of the list the labels are mostly right. In the top 1,000 only 39
passwords score Reasonable or better, because the most common passwords are short and use one kind of
character: 123456, password, qwerty. Further down, people add length and
a digit or two, and the share labelled Reasonable or better rises to 29.4%
in the last band.
The time estimates are wrong everywhere, in a different pattern. The last column compares the estimator's average brute-force guesses (half the keyspace) with the password's rank. It is largest in the top 1,000, where even a "Weak" password is assumed to need hundreds of thousands of times more guesses than the attacker actually spends.
| Rank on the list | Passwords | Reasonable or better | Strong or better | Median overestimate of guesses |
|---|---|---|---|---|
| top 1,000 | 1,000 | 3.9% | 0.1% | about 700,000x |
| 1,001 to 10,000 | 9,000 | 6.2% | 0.2% | about 44,000x |
| 10,001 to 100,000 | 90,000 | 12.0% | 0.3% | about 2,900x |
| 100,001 to 755,994 | 655,994 | 29.4% | 2.0% | about 29,000x |
Overestimate does not depend on the hash or the hardware, because the estimator's time and the dictionary time divide by the same guess rate. Figures rounded to two significant digits.
What it calls strong
These are the most common passwords at each label, the ones a dictionary attack reaches first, with their rank. Only profanity has been left out.
- Reasonable:
qwertyuiop(#21),1qaz2wsx(#29),trustno1(#37),1234qwer(#111),q1w2e3r4t5(#121),qwer1234(#172) - Strong:
Soso123aljg(#1,227),123qweasdzxc(#1,241),1qaz2wsx3edc(#1,473),q1w2e3r4t5y6(#1,666),1q2w3e4r5t6y(#2,021),123456qwerty(#2,611) - Very strong:
Mailcreated5240(#2,209),1qaz2wsx3edc4rfv(#12,513),Hd764nW5d7E1vb1(#16,647),zQjphsyf6ctifgu(#33,145),lhbjkjubz2957704(#37,088),q1w2e3r4t5y6u7i8(#38,912)
Most are keyboard walks. 1qaz2wsx3edc is three columns of a QWERTY keyboard, and
q1w2e3r4t5y6u7i8 alternates the number row with the row below it. They are long and mix letters
with digits, which is all a length-and-character-set model can see. Some of the Very strong entries, such as
Hd764nW5d7E1vb1, look machine-generated and probably come from automated account sign-ups that
reused one password. The list cannot tell those apart from people, so they stay in the counts.
Complexity rules do not help
269 passwords in the ranked list meet a common composition policy: at least 8 characters with
uppercase, lowercase, a digit and a symbol. The estimator rates every one of them Reasonable or better, and
157 of them Strong or Very strong. The most common are L58jkdjP! (#14,581), P@ssw0rd (#15,585), 1qaz!QAZ (#19,834), !QAZ2wsx (#20,047), 1qaz@WSX (#50,842), ZAQ!2wsx (#57,210). Apart from the first, which looks
machine-made, they are the same few substitutions and keyboard patterns that attackers' rules generate.
NIST's current guidance points the same way. SP 800-63B-4, section 3.1.1.2, says verifiers "SHALL NOT impose other composition rules (e.g., requiring mixtures of different character types)" and "SHALL compare the prospective secret against a blocklist that contains known commonly used, expected, or compromised passwords." NIST frames the blocklist as a defence against online guessing. Our point is a related one: a password that is on a public list also falls first in an offline attack, whatever the strength meter says.
How long the list takes to try
Using hashcat rates we measured, or derived from a published benchmark (see how fast a GPU guesses each password hash), trying all 755,994 ranked passwords against one stolen hash takes:
- bcrypt at cost 12, one RTX 5090 (about 2,381 guesses per second, derived): about 5.3 minutes.
- bcrypt at cost 12, the Radeon 8060S in our test machine (318 per second, measured): about 40 minutes.
- MD5, one RTX 5090: under a second (start-up time dominates).
bcrypt still matters. Each stolen hash has its own salt and needs its own run through the list, which turns a database of a million users into a long job. It cannot rescue an individual password that is on the list.
What to do with this
- Read any crack-time estimate as a ceiling. It is the time for a random password of that shape, and a password a person made up is rarely random.
- Use generated passwords. A password manager's random string, or a passphrase of several randomly chosen words, has the entropy the estimator assumes.
- If you run a login system, check new passwords against a blocklist of common and compromised passwords, as NIST requires. Have I Been Pwned's Pwned Passwords range API checks a password against breach data while sending only the first five characters of its SHA-1 hash.
- Drop composition rules and require length instead.
The estimator on the home page now checks a sample against the 100,000 most common entries of this list, and can optionally check it against Pwned Passwords.
Method and limitations
- Source list. SecLists,
Passwords/Common-Credentials/xato-net-10-million-passwords-1000000.txtat commit c205c36a (MIT licence), sha256424a3e03a17df0a2bc2b3ca749d81b04e79d59cb7aeec8876a5a3f308d0caf51. The ranked part ends where the list stops matching the repo's companion list of repeated passwords (-dup.txt, same commit): after entry 755,994. Within it, 2 entries are duplicates and 1 is empty; none contain non-ASCII characters. - Age. The passwords come from leaks collected up to 2015, and newer collections such as Pwned Passwords are far larger. We have not repeated the analysis on newer data. We expect the ranks to move more than the pattern, since the same estimator scores the same strings the same way, but that is an expectation, not a result.
- Rank is not an exact guess count. Different attackers use different lists and orders, and an attacker with a larger list and rules finds many passwords that are not on this one at all.
- Only passwords on the list were scored. This says nothing about a password that is not on it.
- The estimator is this site's, ported line for line into the analysis script. Other calculators use different character-set sizes and thresholds.
Data and code: summary results (JSON), counts by rank band (CSV), analysis script and fetch script, which downloads both lists by commit and checks their checksums.
Updated .