Generate strong, random passwords in your browser β nothing is sent anywhere, ever.
Character sets
Passwords are generated using crypto.getRandomValues entirely in your browser. Nothing is ever sent anywhere.
This generator uses crypto.getRandomValues β the browser's built-in CSPRNG, seeded by the operating system's hardware entropy source. It is the same API used for TLS key generation, not the weaker Math.random() which is predictable and NOT suitable for passwords.
Rejection sampling is used to eliminate modulo bias β a subtle issue where naive implementations favor some characters slightly more than others. Every character in your pool has an exactly equal probability of being selected.
Weak
< 40 bitsVulnerable to brute force on consumer hardware within hours or days. Never use for real accounts.
Fair
40-59 bitsAcceptable for low-value, non-critical accounts. Could be cracked with sustained effort by determined attackers.
Strong
60-89 bitsGood for most personal accounts. Resists all but the most determined adversaries with significant compute power.
Very strong
90+ bitsRecommended for critical accounts: email, banking, password managers. Practically unbreakable with current technology.
Are the passwords safe? Are they sent anywhere?
Yes, they are safe. No, they are never sent anywhere. This tool uses the browser's native crypto.getRandomValues API (a CSPRNG β cryptographically secure pseudo-random number generator) to generate passwords entirely on your device. No data ever leaves your browser β not the passwords, not your settings, nothing.
How long should a password be?
Security experts generally recommend at least 16 characters for important accounts, and 20+ for critical accounts like email, banking, and password managers. This tool uses 20 as the default. A 20-character password using uppercase, lowercase, numbers and symbols achieves roughly 130 bits of entropy β practically impossible to brute-force.
What does 'entropy in bits' mean?
Entropy measures how unpredictable a password is. It is calculated as: length Γ logβ(pool size). For example, a 20-character password using all four character sets (pool of ~88 symbols) has about 20 Γ logβ(88) β 130 bits of entropy. 60+ bits is generally considered strong; 90+ bits is very strong; 128+ bits is practically unbreakable with current technology.
Why should I exclude ambiguous characters?
Characters like l (lowercase L), 1 (one), I (uppercase i), O (uppercase o), and 0 (zero) look nearly identical in many fonts. Excluding them makes passwords easier to read and type manually when you cannot copy-paste β for example when entering a password on a device that doesn't have a clipboard. It slightly reduces the pool size (and thus entropy), so only enable this if you need to type the password by hand.
Is this tool better than using a password manager's built-in generator?
Password manager generators are also excellent and safe. This tool is ideal when you need a quick, independent password without opening an app, or when you want to visually inspect the entropy and character composition. We still strongly recommend storing generated passwords in a password manager (Bitwarden, 1Password, etc.) β never reuse passwords or write them on paper.
What is crypto.getRandomValues and why is Math.random() not used?
Math.random() is a pseudo-random number generator (PRNG) that is NOT cryptographically secure β its output can be predicted if you observe enough values. crypto.getRandomValues is the browser's cryptographic RNG, seeded by the operating system's entropy source (hardware events, timing, etc.). It is the same source used for TLS key generation and is safe for security-sensitive purposes like password generation.