Password Generator
Generate strong, random passwords with your choice of length and character types — created securely in your browser.
We use cookies and similar technologies to enhance your browsing experience, analyze site traffic, and personalize content and ads. By clicking "Accept", you consent to our use of cookies. Learn more in our Privacy Policy.
Generate strong, random passwords with your choice of length and character types — created securely in your browser.
This is a free password generator that builds strong, random passwords directly in your browser. You set the length and decide which character types to include (lowercase, uppercase, digits, symbols), and the tool produces a password that's hard to guess and unrelated to anything personal. There's no account, no install, and nothing to configure on a server.
The randomness comes from the browser's built-in cryptographic generator (the Web Crypto API), which is designed for security-sensitive use rather than the predictable pseudo-random source most code uses by default. Generation happens entirely on your device, so the passwords you create are never sent over the network or stored anywhere. Use it to create a password for a new account, rotate one that may have leaked, or generate values for API keys, database credentials, and other secrets you don't want to invent by hand.
You choose two things: the length and the character set. The character set is assembled from the categories you enable:
a–zA–Z0–9!@#$%^&* and similar punctuationFor each position in the password, the generator pulls a random index into that combined set using crypto.getRandomValues(). That function fills an array with cryptographically strong random bytes from the operating system's entropy source. This matters because the everyday Math.random() is a non-cryptographic pseudo-random generator: it's fine for shuffling a list, but its output can be predictable and should never seed a password. The whole process is synchronous and local, so a result appears the instant you click generate, and nothing leaves the page.
Say you ask for a 16-character password with all four categories enabled. The combined alphabet has 26 + 26 + 10 + ~30 = roughly 92 possible characters. The tool requests 16 random values, maps each into that alphabet, and joins them:
qT7#mK2$pX9!vB4&
Every run produces a different result. A naive way to pick characters is bytes[i] % alphabet.length, but when the alphabet size doesn't divide evenly into 256 that introduces modulo bias, making some characters slightly more likely than others. A correct generator rejects byte values that fall in the biased tail and draws again, so the distribution stays uniform. The result is a password where each position is genuinely independent of the others, with no pattern an attacker could exploit.
Because generation is local, you can use this even on an air-gapped or offline machine: load the page once, disconnect, and it keeps working.
Don't reuse passwords. The single biggest win is one unique password per account, which means you'll want a password manager to store them. A generated password you can't remember is a feature, not a problem.
Watch where symbols are allowed. Some sites silently reject certain punctuation or cap the length. If a password is rejected, regenerate with symbols off, or shorten it, rather than editing characters by hand (manual edits reduce randomness).
Length beats complexity. A longer password with fewer character types is usually stronger than a short one packed with symbols. Reach for 16+ characters when the site allows it.
A generated password is not the same as your master password. For the one secret you must memorize (a password manager's master key), a long passphrase of random words is easier to type and remember than a symbol soup.
Password strength is measured in bits of entropy: how many guesses an attacker needs, on average, to find it. For a random password the formula is:
entropy (bits) = length × log2(alphabet size)
With a 92-character alphabet, each character adds about log2(92) ≈ 6.5 bits. So:
As a rough guide, 80 bits is solid for normal accounts and 100+ bits is comfortable for anything sensitive. Note that this math only holds when the characters are chosen uniformly at random, which is exactly what a cryptographic generator gives you. The moment you swap in a real word, a date, or a keyboard pattern, the effective entropy collapses far below the formula's number, because attackers try those patterns first.
Yes. The tool uses the browser's Web Crypto API (crypto.getRandomValues), which draws from the operating system's cryptographic entropy source rather than the predictable Math.random(). It also avoids modulo bias so every character is uniformly likely.
No. Generation runs entirely in your browser on your device. Nothing is uploaded, logged, or saved server-side. You can even use it offline after the page has loaded.
Use 16 characters or more wherever the site permits it. Shorter is acceptable only when a service caps the length; in that case, max out the limit and include as many character types as allowed.
Symbols add roughly one extra bit of entropy per character, so they help, but length helps more. Turn them off only if a site rejects punctuation; don't disable them just to make a password easier to type.
Each generation draws fresh random values, so two runs with identical length and character settings will still differ. That's expected; click generate again if you want another option.
Yes. Any high-entropy random string works for machine credentials and tokens. Set a generous length, enable the character types your system accepts, and paste the result into your config or secret manager.
You usually shouldn't try. Save it in a password manager. The only password worth memorizing is the manager's master key, where a long random-word passphrase is easier to recall than a string of symbols.
Math.random() is a fast, non-cryptographic pseudo-random generator whose output can be predicted and must never be used for secrets. This tool uses crypto.getRandomValues(), which is built specifically for security-sensitive randomness.