Cryptographic randomness, without modulo bias
This generator draws bytes from crypto.getRandomValues, the same CSPRNG your browser uses for TLS — not Math.random(), which is predictable and unsuitable for secrets. It also applies rejection sampling: a random byte has 256 possible values, and if you naively take byte % poolSize, characters early in the pool come up slightly more often. Instead, bytes above the largest exact multiple of the pool size are discarded and redrawn, so every character is chosen with precisely equal probability. Many quick online generators skip this step.
The entropy readout is simply length × log2(pool size) — the honest measure of how many guesses a brute-force attacker needs. Excluding ambiguous characters (0/O, 1/l/I) shrinks the pool slightly, which the readout reflects; it is worth it for passwords someone may have to read aloud or retype.
How to generate a strong password
- Pick a length — 16+ for accounts, 24+ for anything critical.
- Keep all four character sets enabled unless a site forbids symbols.
- Click Regenerate until you have one, then copy it straight into a password manager.
Passwords are secrets; identifiers are not
Use this tool for credentials, API secrets and encryption passphrases. If you only need a unique identifier — a database key or request ID — a UUID is the right tool: unique by construction, but never meant to be secret. And remember that services should store only a hash of your password, never the password itself.