Password Generator

Generate strong passwords locally, with real entropy shown

Runs entirely in your browser. Your data never leaves this device.

Passwords

How to use it

  1. Set the length and how many passwords you want.
  2. Choose which character sets to include.
  3. Copy the result. Press Regenerate for a fresh batch.

Every selected set is guaranteed to appear at least once, then the remaining positions are filled from the combined alphabet and the whole thing is shuffled.

Length beats complexity

The strength of a random password is length × log2(alphabet size) bits. Both factors count, but they are not equally cheap.

Setup Alphabet 12 chars 16 chars 20 chars
lowercase only 26 56 bits 75 bits 94 bits
+ uppercase + digits 62 71 bits 95 bits 119 bits
+ symbols 86 77 bits 102 bits 128 bits

Read across a row and each four characters buys roughly 19–24 bits. Read down a column and adding every symbol on the keyboard buys about 7 bits total. This is why complexity rules — "one uppercase, one digit, one symbol" — are a poor policy: they add little entropy while reliably producing Password1!, which is in every cracking dictionary. Modern guidance (NIST SP 800-63B) drops composition rules and emphasises length instead.

For anything stored in a password manager, 20 characters from the full alphabet is comfortably beyond brute force and costs you nothing, because you will never type it.

Where random numbers come from

Math.random() is a fast pseudo-random generator seeded from an unspecified source. Its output is statistically fine for animations and completely unsuitable here: given enough output an attacker can recover the internal state and predict every subsequent value. Password generators built on it have been broken exactly this way.

This tool uses crypto.getRandomValues, which draws from the operating system's cryptographic entropy pool. It also rejects raw bytes that fall outside the largest multiple of the alphabet size — without that step, a simple byte % 86 makes the first few characters of the alphabet slightly more likely than the rest. The bias is small and it is also unnecessary.

What the crack-time figure is worth

The estimate assumes an attacker who has your password hash and can try 10^12 candidates per second. That is realistic for a leaked database hashed with something fast like unsalted SHA-256 on GPU hardware.

It does not apply to guessing against a live login form — rate limiting and lockouts make that vastly slower — and it does not apply if the hash was made with bcrypt, scrypt or Argon2, which are deliberately slow and can reduce the attacker's rate by six orders of magnitude or more.

So read the number as a floor, and remember it only measures brute force. A strong password reused across sites is defeated by credential stuffing the moment any one of those sites is breached, regardless of entropy. Unique passwords in a manager, plus a second factor on anything that matters, do more for you than another eight bits.

Frequently asked questions

Is this actually random?

It uses `crypto.getRandomValues`, the browser's cryptographically secure generator, and rejects samples that would introduce modulo bias. `Math.random` is never used — it is predictable and unsuitable for anything security related.

Are the passwords sent anywhere?

No. Generation happens entirely in your browser; there is no network request on this page. It also works with the network disconnected, which you can verify.

What does entropy in bits mean?

Log base 2 of the number of possible passwords your settings allow. Each extra bit doubles the search space. Under about 50 bits is weak against offline attack; 75 or more is comfortable; over 100 is beyond foreseeable brute force.

How is the crack time calculated?

It assumes 10^12 guesses per second — a well-funded offline attack against a fast hash — and halves the search space for the average case. It is an order-of-magnitude estimate, not a promise, and it assumes the attacker does not know your generator's settings.

Does adding symbols help much?

Less than adding length. Going from 62 to 86 characters adds about 0.5 bits per character; adding four characters at 62 adds about 24 bits. Length is the cheaper lever, and it is also easier to type.

Should I skip ambiguous characters?

Only if the password will be read aloud or typed from paper. It costs a little entropy in exchange for fewer support calls about `Il1` and `O0`. For a password living in a manager, leave it off.

Related tools

browse category →

Last updated: