Password Generator
This generator creates random passwords using your browser's cryptographic random number generator, with no server involved. Choose a length and which character sets to include, and every password is drawn from the Web Crypto API on your own device. Nothing is transmitted, logged or stored — which is the only sane arrangement for a tool whose entire output is a secret.
updated
- ✓ Runs in your browser — nothing uploaded
- ✓ No sign-up
- ✓ Free, no limits
Where the randomness comes from
Every character comes from crypto.getRandomValues, the browser's cryptographically secure random source. That is the same primitive security libraries use, and it is categorically different from Math.random, which is fast, predictable enough to be reconstructed from its output, and completely unsuitable for anything secret.
Getting a random character out of a random 32-bit number is where most generators quietly go wrong. The obvious approach — take the number modulo the alphabet size — is biased, because 2^32 does not divide evenly by 87, so the first few characters of the alphabet come up slightly more often than the rest. The skew is small, but it is a real reduction in the work an attacker has to do, and it is entirely avoidable.
This generator uses rejection sampling instead: it discards any value that falls in the uneven tail and draws again, so every character is exactly equally likely. It then guarantees one character from each set you enabled, fills the remainder from the combined pool, and shuffles the result with a Fisher-Yates pass that uses the same unbiased source — so the guaranteed characters do not always land at the front.
How much a character is worth
With all four sets enabled the pool is 87 characters: 26 lowercase, 26 uppercase, 10 digits and 25 symbols. Each character therefore contributes log₂(87) ≈ 6.44 bits of entropy, and because every character is drawn independently the total is simply that multiplied by the length.
The table makes the important point better than any advice can: length dominates. Going from 8 to 16 characters does not double the difficulty, it squares it. Adding symbols to a 16-character password is worth about 5 bits; adding four more characters is worth 26.
This is why the modern guidance from NIST and others is to require length and stop mandating character classes. Complexity rules push people toward predictable substitutions — Password1! and its cousins — which is exactly the pattern cracking tools try first. A long random string from a manager beats a short clever one every time.
| Length | Entropy | What that means in practice |
|---|---|---|
| 8 | ~52 bits | Crackable by a well-funded attacker; too short in 2026 |
| 12 | ~77 bits | Reasonable for low-value accounts |
| 16 | ~103 bits | A sensible default for almost everything |
| 20 | ~129 bits | Comfortably beyond brute force |
| 24 | ~155 bits | Overkill unless you are protecting a key |
Why generating a password on someone else's server is a strange thing to do
A password is a secret whose entire value is that only you have seen it. Asking a remote machine to make one for you undermines that in the most direct way possible: the secret existed somewhere else first.
A server-side generator knows every password it hands out. It may log them, cache them, or keep them in an error tracker without anyone intending to. Even assuming perfect intentions and perfect operations, you now depend on the operator's security rather than your own, for a value you are about to use to protect an account. And you have no way to check any of it from outside.
There is a second, subtler problem. If the generation is remote you cannot know what source of randomness was used. A server quietly using a weak or seeded generator would produce passwords that look perfectly random and are trivially reproducible by anyone who knows the seed — and nothing about the output would reveal it.
Generating locally removes both concerns at once. The password is created on your device by your browser's own cryptographic source and never exists anywhere else. The usual check applies: open the Network tab and generate, or turn off Wi-Fi and generate. Nothing is sent, because there is nothing to send.
What the strength meter is really measuring
The meter uses zxcvbn, the estimator developed at Dropbox, and it is measuring something more useful than the character-class checklists most sites use. Rather than awarding points for containing a digit, it estimates how many guesses a realistic attacker would need — checking against common passwords, dictionary words, names, dates, keyboard patterns like qwerty, and the predictable substitutions people make.
That is why a password satisfying every complexity rule can still score badly. P@ssw0rd1 has upper, lower, digit and symbol, and zxcvbn correctly rates it as worthless, because it is one dictionary word with substitutions any cracking tool applies by default. Meanwhile a long lowercase-only string can score extremely well.
For generated passwords the meter will essentially always read at the top of its range, which is expected — the value of showing it is the comparison. Type in a password you actually use and watch what it says. That is usually more persuasive than any amount of advice about password hygiene.
Frequently asked questions
Is it safe to use an online password generator?
It is safe when generation happens in your browser, as it does here — the password is created on your device by the Web Crypto API and is never transmitted. It is not safe when the generator is server-side, because the secret then exists on a machine you do not control before it reaches you. Check the Network tab to tell the difference.
How long should a password be?
Sixteen characters with all four sets enabled is a sensible default for almost everything, giving roughly 103 bits of entropy. Length matters far more than complexity: going from 8 to 16 characters squares the difficulty, while adding symbols to an already-long password buys only about 5 bits.
What does the strength meter measure?
It uses zxcvbn, which estimates how many guesses a real attacker would need. It checks dictionary words, names, dates, leaked-password lists, keyboard patterns and common substitutions — which is why P@ssw0rd1 scores terribly despite satisfying every complexity rule.
Is this really random, or just random-looking?
It draws from crypto.getRandomValues, the browser's cryptographic source, and uses rejection sampling so no character is more likely than another. The naive modulo approach most generators use is slightly biased, because 2^32 does not divide evenly by the alphabet size — small, but a free gift to an attacker.
Why does my password always include every character type?
One character from each set you enabled is placed deliberately, so the result always satisfies sites that demand an uppercase letter or a digit. The rest are drawn from the combined pool and the whole string is then shuffled, so the guaranteed characters are not sitting predictably at the front.
Should I reuse a generated password?
No. Reuse is what turns one site's breach into a compromise of everything else you own, and it defeats the point of generating a strong password in the first place. Generate a separate one per account and keep them in a password manager — remembering them is not the goal.