Password Generator
Generate strong random passwords with your own length and character rules, and see their entropy. Runs entirely in your browser. Nothing is sent to any server.
Leaves out 0, O, 1, l and I, which are easy to confuse.
Select at least one character type
How this generator works
Every character is drawn from your browser's cryptographic random number generator, the same source used for TLS keys, not from Math.random. Draws that would fall outside a whole multiple of the alphabet size are rejected and redrawn, so no character is even slightly more likely than another: a subtle bias here is what makes otherwise long passwords easier to guess. Nothing is generated on a server, nothing is logged, and nothing is sent anywhere. Reload the page and the passwords you saw are gone for good.
How much entropy is enough?
Entropy measures how many guesses an attacker needs, on average, expressed in bits: each extra bit doubles that number. It depends only on the length and the size of the character set, never on whether a password 'looks' random.
Guessable by an offline attacker in minutes. Fine for nothing.
Holds up to casual attacks, not to a leaked password database.
A reasonable target for an account you care about.
Out of reach of brute force with current and foreseeable hardware.
The figure shown by this tool is an upper bound: with 'at least one of each type' enabled, the guaranteed characters constrain the space slightly. The difference is a fraction of a bit at normal lengths, and the option is worth keeping when a site enforces composition rules.
Examples
Generating a password correctly in code means reaching for the cryptographic random source, not the general-purpose one:
const bytes = new Uint32Array(1);
crypto.getRandomValues(bytes);
// reject and redraw above the largest multiple of the alphabet sizeimport secrets, string
alphabet = string.ascii_letters + string.digits
"".join(secrets.choice(alphabet) for _ in range(20))SecureRandom random = new SecureRandom();
int index = random.nextInt(alphabet.length());import "crypto/rand"
n, _ := rand.Int(rand.Reader, big.NewInt(int64(len(alphabet))))$index = random_int(0, strlen($alphabet) - 1);LC_ALL=C tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 20Use Cases
Service accounts and API credentials
Machine-to-machine credentials are never typed by a human, so there's no reason to keep them short or memorable. Generate the longest string the other system accepts and store it in a secret manager.
Database and admin passwords
Generate with symbols excluded when the password has to survive a connection string, a YAML file or a shell command, where quoting rules can mangle it.
Wi-Fi and shared passphrases
Turn on 'exclude ambiguous characters' for anything someone will read off a screen or a printed card. A password that can't be transcribed correctly gets replaced by a weaker one.
Seeding a password manager entry
Generate a batch, use one, and let the rest disappear when you close the tab. Useful when setting up several accounts in one sitting.