Skip to content

Password Generator

Strong passwords from cryptographic randomness, never Math.random.

Runs entirely in your browser

Passwords are generated in this page. They are never stored, never transmitted, and never included in any analytics event.

A password generator is only worth using if you can tell where the randomness came from. This one uses the browser’s cryptographic random source, and `Math.random` appears nowhere in the code — not as a fallback, not for shuffling, nowhere. A test reads the source on every build to keep it that way.

More about Password Generator

That distinction is not pedantry. `Math.random` is seeded from a value an attacker can often recover, and a password built on it is guessable in a way its length suggests it is not. The difference does not show up in the output: a weak twenty-character password looks exactly like a strong one.

One character is taken from each class you enable before the rest are filled in, so the result actually passes the rules a site will check it against, and the whole thing is then shuffled — otherwise the guaranteed characters would always sit in the same positions, which is a pattern worth not having. Quotes and backslashes are left out of the symbol set, because they are the characters most likely to be mangled by a shell, a config file or a spreadsheet import.

The entropy figure says how many guesses an attacker needs on average, in bits: each extra bit doubles the work. It is calculated from the full pool the password was drawn from, which is the honest number for a password generated this way.

  • Cryptographic randomness only, enforced by a test that reads the source
  • Unbiased selection using rejection sampling, not a modulo
  • At least one character from every class you enable, then shuffled
  • Optional exclusion of 0/O and 1/l/I, which look alike in many fonts
  • No quotes or backslashes, which shells and spreadsheets mangle
  • Entropy in bits, calculated from the actual pool
  • Nothing stored, nothing sent, nothing in any analytics event

How to use it

  1. 1Set the length. Longer matters more than more character types.
  2. 2Choose which kinds of character to include.
  3. 3Generate, and copy the one you want.
  4. 4Generate several at once if you are setting up more than one account.

Questions

How long should a password be?

Sixteen characters or more for anything that matters. Length adds more strength than variety: adding characters beats adding character types.

Is the randomness good enough?

It comes from the browser’s cryptographic random source, the same one used for encryption keys. Math.random is not used anywhere in this tool.

What does the entropy figure mean?

It is how many guesses an attacker needs on average, expressed in bits. Each extra bit doubles that number.

Why are quotes and backslashes missing?

Because they are the characters most often mangled by a shell, a config file or a spreadsheet import. Their absence costs a fraction of a bit and saves a lot of trouble.

Could the password reach you or anyone else?

No: it is generated in the page, never written to storage, and never included in an analytics event. Closing the tab is the end of it.

More Generators
Esc

16 results