Password estimate assumptions These figures use the same rules as src/components/tools/PasswordGenerator.tsx. They are upper bounds for a uniformly random password, not a guarantee, and not a measurement of an attack. Ambiguous characters removed when "Avoid ambiguous characters" is on: 0, O, I, l, 1. Filtered pool sizes: - lowercase without l: 25 - uppercase without I and O: 24 - digits without 0 and 1: 8 (2 3 4 5 6 7 8 9) - symbols, unchanged: 24 (!@#$%^&*()-_=+[]{};:,.?/) - all four sets: 81 - lowercase, uppercase, and digits: 57 The symbol set is exactly: ! @ # $ % ^ & * ( ) - _ = + [ ] { } ; : , . ? / Upper bound bits = length × log2(alphabet size) The page rounds that number for display. The strength label uses the unrounded number: - below 48 bits: Weak - 48 bits up to but not including 72: Fair - 72 bits up to but not including 100: Strong - 100 bits or more: Very strong Average search time = 2^(unrounded bits − 1) / 10^12 seconds. 10^12 guesses per second is the page's offline-attacker assumption, not a measured hash rate. The half-space division is the average for a uniform search. The page then rounds that duration with the same steps as formatBruteForceTime. The generator also places at least one character from each selected set before filling the rest, then shuffles. That constraint makes the real combination count smaller than alphabet^length, which is why the page calls the figure an upper bound. Example A Length 16, all four filtered sets (81 characters). Bits = 16 × log2(81) = 101.43760004615399, displayed as 101. Label: Very strong. Duration: about 54 billion years. Example B Length 12, filtered letters and digits (57 characters), symbols off. Bits = 12 × log2(57) = 69.9946801699769, displayed as 70. Label: Fair, because 70 is below 72. Duration: about 19 years. Example C Length 8, filtered digits only (8 characters). Bits = 8 × log2(8) = 24, displayed as 24. Label: Weak. Duration: less than a second (0.000008388608 seconds before the page's "less than a second" cutoff). The illustrative passwords in illustrative-passwords.txt fit these pools. The bit figures depend on the length and the pool, not on those particular characters. Never reuse the published strings.