Password generator

Generate strong, random passwords in your browser โ€” pick the length and character sets, see live entropy and crack-time, nothing leaves your machine.

Length 20
Chars
Generated password crypto.getRandomValues
โ€”
Exclude ambiguous (I  l  1  O  0)
Require every selected set
Split with dashes
Processed locally

Entropy = length × log₂(pool size) — longer passwords from larger sets are exponentially harder to crack

About this tool

A password generator builds a random string from the character sets you enable โ€” lowercase, uppercase, digits, and symbols. This one draws every character from the Web Crypto API's crypto.getRandomValues and selects indices with rejection sampling, so the result is uniformly distributed with no modulo bias.

The strength readout shows Shannon entropy in bits, computed as length × log₂(pool size): a 20-character password from an 88-character pool is roughly 129 bits, far beyond what a brute-force attack can exhaust. Use Split with dashes to produce segments like abcd-efgh-ijkl โ€” useful for passwords that need to be typed or read aloud.

All data is processed locally on your device โ€” nothing is uploaded to any server.

Frequently asked questions

Yes. Every character is drawn using crypto.getRandomValues, the Web Crypto API that browsers expose for cryptographic use. Rejection sampling removes modulo bias, so every character in the pool has an exactly equal probability of being selected.
Entropy measures how many guesses an attacker would need on average. It is calculated as length × log₂(pool size), so each bit doubles the work: a 128-bit password takes about 2¹²&sup7; guesses on average, which is computationally infeasible to crack.
Characters like I (uppercase i), l (lowercase L), 1 (one), O (uppercase o), and 0 (zero) look similar in many fonts. Excluding them avoids transcription errors when you need to type a password by hand.
Yes, because this tool runs entirely in your browser โ€” no data is sent to any server. You can disconnect from the internet after loading the page and it will continue to work correctly.