About this tool
Why length matters more than a clever substitution
Every extra character multiplies the work an attacker has to do, while a clever substitution (p@ssw0rd) does not, because crackers try those swaps first. The number to watch is the entropy figure above: bits, not “looks complicated”. Thirty bits falls to a laptop; a hundred and twenty does not fall to anything.
That is why the length slider is the first control. If a site rejects the symbols, the answer is not to hunt for a symbol it accepts. Drop symbols, raise the length, and come out with more entropy than you started with.
Where the randomness comes from
- Characters are drawn with your browser’s
crypto.getRandomValues, the same source it uses for TLS keys. It is notMath.random, which is a fast statistical generator whose output becomes predictable once enough of it is seen. - Each index is taken by rejection, not by modulo: a draw that falls outside the largest whole multiple of the pool size is thrown away and redrawn. The lazy version,
draw % poolSize, quietly gives the first few characters in the pool an extra chance, and a generator with a bias in it is not one to trust for anything else. - Every password in a batch is drawn independently, so ten of them are ten independent passwords and not one password re-shuffled.
The sets, and the look-alike trap
- Letters are plain ASCII, both cases, and digits are all ten. Symbols are limited on purpose to the ones that survive being pasted around: no quote marks, no backtick, no backslash, no angle brackets, no pipe, no space. Those are the characters a signup form strips or a configuration file mangles, and a password that has to be re-typed is worse than a slightly shorter one.
- Excluding look-alikes removes 0, O, o, 1, I and l. It costs a little entropy: the pool drops from 86 characters to 80, which is far less than one extra character buys back. Turn it on if you ever read a password off a screen; leave it off if you only ever paste from a password manager.
- With every set on the pool is 86 characters, about 6.4 bits per character, so a 20-character password is around 128 bits, and 126 with the look-alikes excluded.
What the crack-time number means, and what it hides
The estimate assumes an attacker who has the password, offline, and can try 100 billion guesses a second: a fast unsalted hash (MD5, SHA-1) on serious hardware. It is an average case (half the space), and it is the kindest thing that could happen to a password, so treat it as a floor, not a guarantee. Against a slow, salted hash such as bcrypt, or a login that throttles attempts, the same password lasts orders of magnitude longer.
What no crack-time figure covers is reuse. The overwhelmingly common way a good password gets someone broken into is being used on two sites, one of which leaks. A generated password belongs to one account, paired with two-factor authentication where the site offers it, and kept in a password manager rather than in a note or a browser tab you leave open.
Privacy, in one line
This page makes no network request after it loads, so there is nowhere for a password to go. The one place it leaves the page is your clipboard when you press Copy. On the way, check whether your clipboard is synced across devices or kept in a history, and clear it with Ctrl+Shift+Delete or the OS clipboard viewer if that matters. Nothing else is kept: closing the tab erases the passwords, and the privacy page covers the rest of the site.