How this generator works
Every password is built locally in your browser from
crypto.getRandomValues, the same cryptographically secure random source used for
encryption keys — not Math.random(), which is predictable. The password is only ever
displayed as output: it is never transmitted, never stored, and never written into the
page URL, so nothing about it can leak through your history, bookmarks or analytics.
Two details matter for unbiased, well-formed passwords. First, rejection sampling: picking "random number modulo pool size" subtly favours the first characters of the pool, so this generator discards random draws that would introduce that bias and draws again — every character in the pool is exactly equally likely. Second, guaranteed coverage: one character is drawn from each set you selected, the rest are drawn from the combined pool, and the result is shuffled with a Fisher–Yates shuffle (also fed by secure randomness). You will never get a "symbols required" rejection from a site because the symbol happened not to appear.
Worked example
With the defaults — 16 characters from lowercase (26), uppercase (26), numbers (10) and symbols (27) — the pool is 89 characters, giving 16 × log₂(89) ≈ 104 bits of entropy. That is about 10³¹ possible passwords: at a trillion guesses per second, exhausting them would take longer than the age of the universe.
Reading the strength label
- Weak (< 45 bits) — crackable offline; use only where the account locks out attempts.
- Fair (45–59 bits) — fine against online attacks, marginal offline.
- Strong (60–79 bits) — good for most accounts.
- Very strong (≥ 80 bits) — resists serious offline cracking; ideal with a password manager.