Skip to content
Calcrivo

Dictionary Attack Probability Calculator

Estimate the chance a dictionary and rule-mangling attack finds a password, and how long exhausting the wordlist takes.

Inputs

words

14,344,391 is the rockyou.txt corpus; the HIBP list holds over 900 million.

rules

Hashcat's best64 rule set applies 64 transforms — capitalise, append digits, leetspeak.

guesses
%

Breach studies put 25–35 % of human-chosen passwords inside a large mangled wordlist.

Probability of Success

0.0327%

Candidate Space

9.180 × 10⁸

words × rules

Candidate Space Covered

0.1089%

Time to Exhaust the List

Under 1 second

Risk Band

Informational

Step by step

  1. Values used

    Wordlist size = 14,344,391 words; Mangling rules per word = 64 rules; Guesses the attacker makes = 1,000,000 guesses; Chance the password is in the corpus = 30 %; Attack rate = Offline MD5 — 100 G/s

  2. Dictionary Attack Probability

    P(success) = P(password is in the corpus) × (guesses made ÷ (words × mangling rules)), capped at the in-corpus probability.

  3. Exhaustion time

    time to exhaust = (words × rules) ÷ guesses per second.

  4. Probability of Success

    = 0.0327

  5. Candidate Space

    = 918,041,024.000

  6. Candidate Space Covered

    = 0.1089

  7. Time to Exhaust the List

    = Under 1 second

  8. Risk Band

    = Informational

How it works

A dictionary attack never searches the full keyspace — it searches a ranked candidate list built by applying mangling rules to every word. The chance of success is therefore the chance the target password is somewhere in that list, multiplied by the fraction of the list the attacker actually gets through. Because the list is ordered by real-world frequency, early guesses are worth far more than this uniform model suggests. It explains why a policy-compliant password like Summer2024! dies in seconds: rule-mangled wordlists reach it after a few million guesses, while brute force would need 10^23.

Formulas

Dictionary Attack Probability

P(success) = P(password is in the corpus) × (guesses made ÷ (words × mangling rules)), capped at the in-corpus probability.

words × rules
Total candidates the attack will generate
guesses made
How far into that candidate list the attacker gets

Exhaustion time

time to exhaust = (words × rules) ÷ guesses per second.

Frequently Asked Questions

How is Dictionary Attack Probability calculated?

P(success) = P(password is in the corpus) × (guesses made ÷ (words × mangling rules)), capped at the in-corpus probability. A dictionary attack never searches the full keyspace — it searches a ranked candidate list built by applying mangling rules to every word. The chance of success is therefore the chance the target password is somewhere in that list, multiplied by the fraction of the list the attacker actually gets through. Because the list is ordered by real-world frequency, early guesses are worth far more than this uniform model suggests.

Why does Dictionary Attack Probability matter?

It explains why a policy-compliant password like Summer2024! dies in seconds: rule-mangled wordlists reach it after a few million guesses, while brute force would need 10^23.

What values do I need to enter?

This calculator takes 5 inputs: Wordlist size, Mangling rules per word, Guesses the attacker makes, Chance the password is in the corpus, Attack rate. The pre-filled defaults are a realistic starting point — replace them with figures from your own environment for a result you can act on.

Why is my computed probability lower than headlines suggest?

This model assumes the attacker walks the candidate list in random order. Real cracking tools order candidates by observed frequency, so the first million guesses recover far more than one millionth of the list — commonly 20–30 % of a leaked hash set. Treat the output as a floor.

How do I defend against this?

Block the corpus rather than trying to out-run it: screen new passwords against a breach list, require length instead of composition, and use a memory-hard hash so each candidate costs the attacker real time.

You might also need