Password Generator

Generate strong random passwords with a customizable character set and length

—

How password strength is measured: entropy, length and crack cost

Strength is measured in entropy, not in "looks complex"

For a randomly generated password, strength is quantified by information entropy. The formula is simple:

entropy (bits) = length × log base 2 (charset size)

Entropy per character for common character sets:

Character setSizeEntropy per char
Lowercase letters264.70 bits
Upper + lower letters525.70 bits
Upper + lower + digits625.95 bits
Upper + lower + digits + common symbols946.55 bits
Diceware word list (per word)777612.9 bits per word

Plugging the numbers in gives a counter-intuitive result:

A longer but simpler password beats a shorter but more complex one. Complexity buys a linear amount per character, while length itself is a multiplier. Longer passwords are also easier to remember (you can combine words), so length comes first. This is why a 20-character passphrase of ordinary words can outrank a 12-character mix of symbols on real-world strength, even though the mixed string looks more "secure" at a glance.

Crack cost: why "strong enough" depends on how the other side stores passwords

Entropy only means something once you fix a "guess rate". That rate is decided entirely by how the target site stores passwords — and you do not control it:

How they store itPer-GPU guess rate (order)50 bits takes75 bits takes
Plaintext / reversible encryptionNo cracking neededInstantInstant
Raw MD5 / SHA-1 hash1011 per secondHoursMillions of years
bcrypt (cost 12)104 per secondCenturiesFar beyond the age of the universe
Argon2id (tuned)103 per secondThousands of yearsInfeasible

The conclusion: you cannot know how the other side stores passwords, so choose as if the worst case (a fast hash) were true. That is also why the recommended minimum length has risen from 8 characters a decade ago to 12-16 today. And notice that before asking "is my password strong", the more important rule is do not reuse passwords — one leak hands over every account that shared it. Treating every account as though it were stored with a fast hash is the only safe default, because you will never be shown the other side's database.

Random source: never use Math.random

Many generators call Math.random(), which is not a cryptographically secure pseudo-random number generator. Its internal state can be reversed from observed outputs, and once the state is known, every future password it produces is predictable.

The correct call is crypto.getRandomValues() from the Web Crypto API, backed by the operating system's entropy pool; that is what this tool uses. You can verify it yourself: open the browser devtools, override Math.random, and the tool's output is unaffected — proof it does not take that path.

Practical generator issues

What not to do

The tool supports custom length, charset toggles, ambiguous-character exclusion and batch generation, all local.

FAQ

Is the password strong enough?

Characters come from the cryptographic-grade random source crypto.getRandomValues. A 20-character mixed password has a search space far beyond any brute-force capability.

Will my generated passwords be saved?

No. Generation happens only in browser memory and disappears on refresh. The server receives nothing.