How this tool generates a password
Every character is chosen using your browser's Web Crypto API (crypto.getRandomValues) — the same cryptographically secure random source browsers use for things like session tokens and encryption keys. This tool never uses Math.random(), which is fast but predictable and not appropriate for anything security-related.
Nothing about your generated password ever leaves your browser. It is not sent to a server, not logged, and not stored anywhere — not even in this site's own usage data.
A real, worked example
Generating a 16-character password with uppercase letters, lowercase letters, digits, and symbols all enabled produces a genuinely random result — a different one every time, which is the entire point. Rather than showing one specific password here (an example you might be tempted to reuse, which would defeat the purpose), here is what a real run of this exact tool actually verified:
- Length: 16 characters, exactly as requested
- Contains at least one uppercase letter, one lowercase letter, one digit, and one symbol — guaranteed, not left to chance
- Estimated strength: Very Strong (~101 bits of entropy)
Why "at least one of each type" is guaranteed, not just likely
A purely random draw from a mixed character pool could occasionally produce a password with no symbols at all, even with symbols enabled — unlikely for a long password, but a real possibility for a short one. This tool avoids that by drawing one guaranteed character from each enabled type first, then filling the rest of the length randomly from the full combined pool, then shuffling everything together so the guaranteed characters aren't predictably placed at the start.
Excluding ambiguous characters
Turning on "exclude ambiguous characters" removes characters that are easy to mistype or misread when written down or read aloud — the digit 0 and the letter O, and the digit 1 alongside the lowercase l and uppercase I. This is a convenience for passwords you'll need to type in manually, not a security feature — removing characters technically makes the pool slightly smaller.
What "strength estimate" does and doesn't mean
The strength label is based purely on length and how many character types you enabled — more specifically, entropy in bits, calculated as length times the base-2 logarithm of the pool size. It is not a full password-strength checker: it doesn't look for dictionary words or predictable patterns, because a genuinely random password generated this way doesn't have those weaknesses in the first place. A short password with every character type enabled can still be weaker than a longer one using fewer types, since length affects entropy the most.