Password Generator
Generate a strong random password in your browser, with a live entropy readout. Uses your browser's cryptographic random number generator. Nothing is sent anywhere.
What is a password generator?
A password generator draws characters at random from a defined alphabet and strings them together. The value is in what it refuses to do. It has no favourite letters, no birthday, no keyboard walk, no habit of putting the capital first and the exclamation mark last. Asked to invent something random, a person produces what a cracking rig ranks highly in its first million guesses. A generator produces something whose only weakness is the size of the space it came from, and that size is a number you can read off the page.
This one has two modes. Password builds a character string: a length between 8 and 128, defaulting to 20, and four pools you can switch on and off, lowercase, uppercase, digits, and symbols, with a toggle that strips out characters people mistake for one another. Passphrase builds something you can say out loud instead, several words drawn from the 7,776 word EFF list and joined by a separator you pick. Under the field sits the figure that matters, the bits of entropy your settings produce, with a rating attached. It is built by JavaScript in the tab you already have open, and nothing crosses the network.
When to use it
The everyday case is a new account you will never type the password into by hand, because a password manager fills it. Push the length up and leave every class on. Nothing about 32 characters is harder for you than 12 when software does the typing. The other trigger is rotation, when a shared credential has to change because someone left, or because a provider mailed you the sentence about unauthorised access to their systems.
Machine credentials are the quieter case and often the more valuable one. Database users, service accounts, SMTP logins, the admin password on a router or a NAS. These get read by software and stay in place for years, so length costs nothing. Where a system rejects symbols or caps the length at 16, drag the slider down and watch what it does to the entropy figure before accepting it. If you want an identifier rather than a secret, use the UUID generator on this site instead. A UUID is meant to be unique and is fine to log. A password is meant to be unguessable and is not.
Passphrase mode is for the handful of secrets a person has to handle by hand. The password protecting your password manager, a disk encryption key, a laptop login, the wifi you read out to visitors. Anything you have to dictate over the phone, copy off one screen onto another, or type on a phone keyboard where every symbol is two taps away. A random 20 character string is stronger per character and miserable in all of those situations. Six words is around 77 bits and you can say it down a phone line without spelling anything out. The tradeoff is length. Matching a 20 character password bit for bit would take 11 words, about 87 characters once the hyphens are counted, which is past the eight this tool will generate and past what many fields accept. Eight words is 103 bits, and that is the ceiling here.
How this tool works
Every character comes from crypto.getRandomValues, the browser interface to the operating system cryptographic random number generator. Math.random is never called. It is fast, reconstructible from a handful of outputs in some engines, and was never built to protect anything.
Turning random bytes into random characters is where generators go wrong. The obvious line is alphabet[byte % alphabet.length], and it is biased whenever 256 is not an exact multiple of the alphabet length. With all four pools on the alphabet is 90 characters. Bytes 0 to 179 cover those 90 slots twice over, but the leftover bytes 180 to 255 reach only the first 76, so those come up half again as often as the last 14. This tool discards any byte at or above 180 and draws again, which is called rejection sampling. Every character then has an equal chance, and the entropy figure is the real one.
With more than one class selected, the finished password is checked to confirm at least one character from each appeared. If one is missing, the whole thing is discarded and a fresh one drawn. It is never patched by dropping a digit into a fixed position, which would hand an attacker a structure to work with. Discarding keeps the survivors uniform across exactly the passwords that satisfy the rule. That set is slightly smaller than the full one, so the difference comes off what you are shown: 0.15 bits at 20 characters, and around a full bit at the 8 character minimum, where the readout says 50 rather than 51.
Entropy is length multiplied by the base 2 logarithm of the pool size, the standard figure for a password drawn uniformly from a known alphabet. Assume the attacker knows your settings, because with a public tool they do. The bands are fixed: under 40 bits is Weak, 40 to 59 is Fair, 60 to 79 is Strong, 80 and above is Very strong. A rig managing 10 billion guesses a second against a fast unsalted hash exhausts 50 bits in a little over a day, and 80 bits in millions of years. Against bcrypt or Argon2 it manages a few thousand a second instead, and you never get to choose which one is storing your password.
Passphrase mode counts differently, and the difference is worth spelling out because most generators get it wrong. Each word is an independent uniform draw from 7,776 words, so it contributes log2(7776), about 12.92 bits, and four words come to roughly 51. Appending the number adds log2(1000), near enough 9.97, because the number is drawn uniformly from 0 to 999 rather than by picking a digit count first. Capitalising the words adds nothing at all. Title Case applied to every word is a fixed transformation of the phrase, so an attacker who knows the setting just tries the capitalised form, and here the setting is on a public page. Only randomness counts, and the separator is your choice rather than a draw, so it is worth zero as well. The figure under the field reflects that.
The exclude ambiguous option removes 13 characters: 0, capital O and lowercase o; 1, lowercase l, capital I and the pipe; 5 and capital S; 8 and capital B; 2 and capital Z. Every member of each confusable group goes, so no two survivors can be mistaken for each other. Lowercase s, b, and z stay, since it is the capitals that resemble 5, 8, and 2. Digits take the worst of it, dropping to 3, 4, 6, 7, and 9 and pulling the pool from 90 down to 77. That costs 0.22 bits per character: 20 characters falls from 129 bits to 124. Worth paying when a person has to read the password off a screen and type it somewhere else, and pointless when a password manager does the work.
The symbol pool is 28 characters: ! @ # $ % ^ & * ( ) - _ = + [ ] { } ; : , . ? / < > ~ and the pipe. Quotes, backticks, backslashes, and spaces are left out on purpose, since those are the ones that break shells, CSV exports, and connection strings. Nothing generated here is uploaded, logged, or stored.
Examples
Default settings
InputLength 20, all four character types, ambiguous characters allowedOutputcY#s>XGejImD<J:7/.YMOne sample rather than a fixed result, since every draw differs. A 90 character pool at 20 characters gives 129 bits, past the point where the password is the weakest thing about the account.
Built to be read aloud
InputLength 16, all four character types, exclude ambiguous onOutput%>xmaV]?y3YT;nOne sample. No 0, O, o, 1, l, I, pipe, 5, S, 8, B, 2, or Z appears, so nothing in it can be misheard on a phone call or mistyped off a handover sheet. The 77 character pool gives 99 bits here.
A system that rejects symbols
InputLength 24, lowercase and uppercase and numbers, symbols offOutputqM1kqN4PDa2jdzrCRZi5P7mVOne sample. Dropping symbols cuts the pool from 90 to 62 characters, worth about half a bit each. Four extra characters of length more than cover it: 142 bits, above the default 129.
The shortest this tool will go
InputLength 8, all four character typesOutputB7NhQr|nOne sample. Eight characters over the full pool is 50 bits, rated Fair. That survives a login form which limits attempts. It does not survive a leaked password database and a few GPUs, and that is why the slider stops here.
Frequently asked questions
Is this password generator safe to use?
Generation is as safe as your browser, because that is where it happens. Characters come from crypto.getRandomValues, the same source your browser uses for TLS key material, and the result never leaves the page. No request carries it and nothing is written to storage. A server side generator, however well meant, means the secret existed on someone else's machine before it was yours, and you cannot check what happened to it there.
How long should my password be?
Twenty characters with every class on, the default here, gives 129 bits and covers anything short of a nation state adversary. If a password manager does the typing, use 32. If a human types it often, 16 characters with ambiguous ones excluded is a fair compromise at 99 bits. Length beats complexity: each extra character multiplies the possibilities by the pool size and you can keep going, while adding a class takes the pool from 62 to 90 once and stops.
What does the bits of entropy number mean?
It is the base 2 logarithm of how many passwords your settings could have produced. Fifty bits is around 1.1 quadrillion candidates, and an attacker guessing at random expects to land on yours after roughly half of them. Every extra bit doubles the work. It assumes the attacker knows your length and your character classes, which is right for a public tool. What it cannot tell you is how fast they can guess. The same 60 bit password is decades of work against Argon2 and an afternoon against unsalted MD5.
What is the difference between a password and a passphrase?
A password is a string of characters drawn one at a time from an alphabet. A passphrase is several whole words drawn from a wordlist. Both get their strength from the same place, the number of independent random choices behind them, so the comparison is a matter of where the entropy sits rather than which idea is better. One character from a 90 character pool is worth 6.5 bits; one word from the EFF list is worth 12.9. That is why a 20 character password (129 bits) beats a four word passphrase (51 bits), and why six words (77 bits) is the usual recommendation when the phrase has to stand on its own. What a passphrase buys is a human being able to read it, say it, and type it correctly on a phone keyboard. Pick whichever one matches how the secret has to travel.
Does a strong password protect me from everything?
No. Entropy defends against guessing, whether that is someone hammering a login form or working offline through a stolen password database. It does nothing against a phishing page that persuades you to type the password in yourself, a keylogger, a service storing passwords in plaintext, or a session token stolen after you have logged in. Two things do more for you than any single strong password: a different password on every site, so one breach stays contained, and multi factor authentication wherever it is offered. A password manager generating a unique password per account is how you get the first, and it beats every memorable scheme yet invented.
Can you help us stop handing passwords around by hand?
Yes. A browser tab is right for one account at a time. It stops being right when you are provisioning credentials for forty service accounts, rotating database passwords on a schedule, or proving to an auditor that no shared credential is older than 90 days. That job belongs in a secrets manager with rotation wired into deployment, rather than in anyone's clipboard. Setting that up is ordinary work for Zinc Online Solutions. Show us how a credential reaches a service today and we will map the version that needs no human in the middle.