Generate passwords that never leave this page
Strong random passwords generated free by your own browser from the operating system's cryptographic source. Nothing is transmitted, logged or stored.
How it works
Each character is drawn with crypto.getRandomValues, the operating system's own cryptographic source, one byte at a time. A byte landing in the uneven tail above the largest whole multiple of the alphabet size is thrown away and redrawn, because taking the remainder without that step makes the earliest characters of the alphabet very slightly more likely. The reported strength is the entropy of the draw itself, log2 of the alphabet size to the power of the length, rather than a guess about the resulting string.
What to watch out for
Adding one character to a password multiplies the guesses needed by the size of the alphabet. Adding a symbol requirement to a short one barely moves it. A twenty-character password of only lower-case letters is far harder to break than a ten-character one using every symbol on the keyboard, which is why the length control is first here.
Nobody remembers twenty random characters, so it goes in a password manager, in a browser, or on paper in a drawer — all of which are fine. What is not fine is generating something strong and then reusing it in five places, which reintroduces exactly the risk it was meant to remove.
The number shown is how much unpredictability went in — the alphabet size raised to the length. It is not a judgement of the characters that came out. A generator that scored its own output would give a different answer for two passwords drawn the same way, which measures nothing useful.
Leaving out l, I, 1, O and 0 shrinks the alphabet slightly, which costs about a tenth of a bit per character. It is worth it whenever the password will be read off a screen or a printout and typed by hand. Switch it off when the password only ever travels by copy and paste.
Limits
Files up to about 1 MB work reliably. Beyond that, the ceiling is your device's memory rather than any rule we impose — the work happens on your own machine. Tested in Chrome 140, Firefox 143, Safari 18.
Why generating a password on a website is normally a bad idea
It is worth stating the objection before answering it, because the objection is correct.
If a page sends your details to a server and the server sends back a password, then a stranger’s machine has seen your password. Whether it was logged, kept or noticed is entirely a matter of trust, and there is no way for you to check. The usual promise — “we don’t store anything” — is unverifiable by design.
This page does not work that way. The password is drawn in your browser and never transmitted, because there is nothing here to transmit it to. You can confirm that: disconnect from the internet and the page keeps working perfectly.
That is the only version of this tool that makes sense.
Where the randomness comes from
Two sources of randomness exist in a browser, and only one is suitable.
Math.random is a fast pseudo-random generator. It is excellent for shuffling a
deck, animating a particle, or picking a random tip to display. It is unsuitable
for a secret, because it is seeded from a small amount of state — anyone who sees
enough of its output can work out that state and reproduce every number it will
ever produce.
crypto.getRandomValues is the operating system’s own cryptographic source, the
same one that generates the keys protecting the connection you are reading this
over. That is what is used here.
There is a second, subtler point. The obvious way to turn a random byte into a character is to take the remainder after dividing by the alphabet size. Unless that size divides 256 exactly, the earliest characters come up slightly more often than the rest. The bias is small, and removing it costs three lines: when a byte lands in the uneven tail, throw it away and draw again. That is what happens here.
How long is long enough
The honest answer depends on what is guarding the password, and you rarely know.
As a rule of thumb, with the alphabet switched fully on: twelve characters is about 78 bits and is fine for an ordinary account behind rate limiting. Sixteen is about 104 bits and is comfortable for anything that matters. Twenty, the default here, is about 130 bits and is beyond brute force by any means that currently exist or are in prospect.
Beyond that you are protecting against the password leaking rather than being guessed, and length stops helping. Uniqueness is what helps then: a different password everywhere, so one breach stays one breach.
When to turn the symbols off
Some sites still reject punctuation, silently truncate long passwords, or accept a password at sign-up and refuse it at login. This is bad practice and it is common.
If a password will not go in, lengthen it and drop the symbols rather than shortening it. Four extra letters buy back much more than the punctuation was worth.
Your files never leave your browser. Last updated 2026-08-02.
Related tools
- Draw random numbers, fairlyPick numbers in any range free, with or without repeats, drawn from your browser's cryptographic random source. No server, no seed, no hidden bias.
- Make a QR code that stays yoursType a link, a message or a Wi-Fi password and get a free QR code as PNG or SVG. No account, no expiry, no tracking redirect, and nothing is uploaded.
- Put a password on a PDFEncrypt a PDF with a password free, with no signup. The password never leaves your machine, and the page is honest about which restrictions actually hold.