All toolsEveryday

Password Generator

Generate strong, random passwords entirely in your browser using the Web Crypto API. Choose a length and which character types to include, then see each batch's strength in bits of entropy. Nothing you generate here is sent anywhere or stored — refresh the page and it's gone.

8–64 characters. NIST's guidance recommends at least 8 characters (15+ if a password is your only login factor) and permitting at least 64; NCSC recommends a minimum length with no maximum cap. 16 is comfortably above both.
Up to 20 at a time, all from the same settings.
Drops 0, O, 1, l and I — characters that look alike in many fonts. Useful if you'll ever need to read the password off a screen or type it from a printout. Shrinks the character set slightly, so entropy for the same length drops a little.

    Every character is chosen independently, one at a time, with crypto.getRandomValues — the browser's cryptographically secure random number generator — never with Math.random, which is not safe for anything security-related. Generation happens entirely on this page: nothing you generate is sent to a server, logged, or stored anywhere, including by this site.

    How the strength readout works

    Each character is drawn independently and uniformly at random from the character set you've selected (we don't force one of each type — doing so would make the character choices slightly less than uniform and the entropy figure below less than exact). With a character set of size N and a password of length L, the number of equally likely passwords is NL, and the entropy in bits is log₂(N) × L — the standard measure of how many yes/no guesses an attacker checking every possibility would need, on average, to find it. The label next to the number (weak / reasonable / strong / very strong) is this tool's own plain-English rule of thumb for reading that figure, not a number from NCSC or NIST — neither publishes a bits-of-entropy scale for user passwords, which is part of why both now recommend judging a password by its length and character set rather than a target entropy score.

    FAQ

    Is it actually safe to generate a password on a website?
    On this page, yes — the generation happens entirely in your browser using crypto.getRandomValues, the Web Crypto API's cryptographically secure random number generator, which MDN's documentation confirms is seeded for cryptographic use and runs locally with no network request involved. Nothing you generate is transmitted, logged, or stored by this site. That said, a password is only as safe as where you keep it afterwards — save it straight into a password manager rather than a plain text file, email, or note.
    Why does the tool push length over complicated character rules?
    Because that's what the two guidance bodies cited on this page now recommend. NCSC's password guidance says it does not recommend complexity requirements for user-generated passwords, since they push people toward predictable patterns attackers already anticipate, and recommends a minimum length with no maximum cap plus machine-generated passwords from a password manager. NIST SP 800-63B says verifiers should require at least 8 characters (15+ where the password is the only authentication factor), should permit at least 64, and "SHALL NOT impose other composition rules (e.g., requiring mixtures of different character types)". This tool follows that spirit: all the character-type toggles are here for you to include as many kinds as you like, but length is the dial that matters most.
    What are "ambiguous" characters and should I exclude them?
    They're characters that look alike in a lot of typefaces — zero and capital O, the digit one and lowercase L and capital I. They only matter if a human will ever have to read or retype the password (off a screen, from a printed card); a password manager that copies and pastes it never has this problem. Leave the toggle off for maximum strength at a given length, or turn it on if legibility matters more to you.

    Sources

    Method: each password is built one character at a time from your selected set, using crypto.getRandomValues with rejection sampling — an out-of-range byte is discarded and re-drawn rather than reduced with modulo — so every character in the set is exactly equally likely, with no bias toward the start of the set. Bits of entropy = length × log₂(charset size), the standard formula for a string whose characters are chosen independently and uniformly at random.