An interactive/CLI wordlist generating tool for brute-forcing "strong" human generated passwords with user inputted phrases, dates, and web-scraped related keywords.
- Interactive or CLI mode – choose your preferred workflow.
- Single or multiple phrases – combine them with separators, in all orders.
- Case mutations – original, lower, upper, title, swapcase, and random case.
- Number & special character suffixes – configurable lists (e.g.,
123,!,2024). - Exhaustive mode – generate every possible combination (deterministic, no randomness).
- Streaming mode – write directly to disk with minimal memory usage, ideal for huge wordlists.
- Deduplication – optional set‑based uniqueness (memory‑intensive).
- Progress bars – if
tqdmis installed. - Graceful interrupt handling – partial files are cleaned up on
Ctrl+C. - Web scraping – fetch semantically related words from
relatedwords.ioover HTTPS and use them as phrases. - Date modes – generate simple date strings (
--date) or strong password‑ready date variants with ordinals, separators, and specials (--date-strong). - Sample mode – preview first N lines without writing a file (
--sample). - Interactive improvements – show current phrases,
backcommand to remove last phrase,listcommand. - Safe filenames – long combined filenames are automatically truncated with a hash to avoid OS limits.
- Deterministic ordering – default suffix lists and strong date output are reproducible (preserves insertion order).
The script requires Python 3.6+ and no mandatory external libraries.
For the web scraping feature, install:
pip3 install requests beautifulsoup4For progress bars (optional):
pip3 install tqdmRun without arguments:
python3 wordlist-maker.pyYou will be guided through:
- Adding phrases manually or scraping them from a topic.
- Setting combination length, suffixes, and other options.
- Generating wordlists and optionally merging them.
Interactive commands:
back – remove the last added phrase
list – show current phrases
done / n – finish adding phrases and proceed
Generate 10,000 variations for a single phrase:
python3 wordlist-maker.py --phrases "Fluffy" --count 10000 --output fluffy.txtCombine two phrases with default separators (``, _, `-`, `.`):
python3 wordlist-maker.py --phrases "cat" "dog" --count 5000 --output pets.txtUse exhaustive mode (all case & suffix combinations, no randomness):
python3 wordlist-maker.py --phrases "admin" --exhaustive --output admin_all.txtFetch 30 related terms for “football” and merge them with a manual phrase:
python3 wordlist-maker.py --scrape football --scrape-limit 30 --phrases "goal" --output football_words.txtScrape multiple topics at once (the tool adds a 0.5s delay between requests):
python3 wordlist-maker.py --scrape cars gaming music --scrape-limit 20 --output hobbies.txtGenerate common date representations (e.g., 100914, 10Sep14, September10, 20140910).
By default they are added as phrases (so they can be combined with other words). Use --date-as-suffix to append them as suffixes.
# Generate a wordlist with only date strings
python3 wordlist-maker.py --date 15/8/2021 --output date_only.txt
# Append date variations to a base phrase
python3 wordlist-maker.py --phrases "password" --date 15/8/2021 --date-as-suffix --count 5000 --output password_dates.txt
# Combine date phrases with another word
python3 wordlist-maker.py --phrases "welcome" --date 15/8/2021 --max-len 2 --output welcome_dates.txtGenerate realistic password variants for a date, including:
- Ordinals (
1st,2nd,3rd,4th, …) - Month names (full and abbreviated, lower and capitalised)
- Separators (
-,/,.,_) - Special characters (
!,@,#,$, …) placed at beginning, end, or both - Different orders (day‑month‑year, month‑day‑year, year‑month‑day)
# Generate strong date passwords directly (as phrases)
python3 wordlist-maker.py --date-strong 10/9/2014 --output strong_dates.txt
# Append strong date variants as suffixes to a base phrase
python3 wordlist-maker.py --phrases "admin" --date-strong 10/9/2014 --date-strong-as-suffix --count 10000 --output admin_strong.txt
# Combine strong date phrases with other terms
python3 wordlist-maker.py --phrases "company" "user" --date-strong 10/9/2014 --max-len 2 --output company_dates.txt
# Preview the first 20 strong date variants without writing a file
python3 wordlist-maker.py --date-strong 10/9/2014 --sample 20Example output of --date-strong 10/9/2014 --sample 5:
september10th2014
10thSeptember2014
2014september10th
10-09-14
10/09/2014!
Sep10th2014?
2014-09-10!!
!10thSeptember2014!
Preview the first N lines of generated output without writing a file. Works with any mode (single phrase, combined, exhaustive, date modes).
# See what a combined wordlist would look like
python3 wordlist-maker.py --phrases "hello" "world" --max-len 2 --sample 10
# Check strong date output
python3 wordlist-maker.py --date-strong 1/1/2020 --sample 8| Argument | Description |
|---|---|
--version |
Show program's version number and exit. |
--interactive |
Run in interactive mode (default if no arguments). |
--phrases |
Space‑separated list of phrases. |
--phrases-file |
File with one phrase per line (overrides --phrases). |
--count |
Number of variations to generate (random mode). Default: 1000. |
--output |
Output filename (CLI mode). Default: wordlist.txt. |
--output-dir |
Output directory. Default: list-maker. |
--exhaustive |
Generate all possible case + suffix combos (deterministic). |
--max-len |
Max combination length for multiple phrases (2 = pairs, 3 = triples). Default: 3. |
--stream |
Stream directly to disk (no dedup, low memory). |
--dedup |
Remove duplicates in combined mode (uses more memory). |
--seed |
Random seed for reproducibility. |
--quiet |
Suppress progress output. |
--verbose |
Show detailed logging. |
--separators |
Custom separators for combining (e.g., _ - .). |
--specials |
Custom special characters (e.g., ! @ #). |
--numbers |
Custom number suffixes (e.g., 123 2024). |
--no-numbers |
Do not append number suffixes. |
--no-specials |
Do not append special characters. |
--no-suffix |
Do not append any suffix. |
--no-title-case |
Exclude title case transformations. |
--no-swap-case |
Exclude swap case transformations. |
| Scraping options | |
--scrape |
One or more topics to scrape (e.g., --scrape cars soccer). |
--scrape-limit |
Max scraped terms per keyword. Default: 50 (0 = unlimited). |
--scrape-min-len |
Minimum character length for scraped terms. Default: 2. |
| Date options | |
--date |
Generate simple date strings from a date (e.g., 10/9/2014). |
--date-as-suffix |
Append simple date variations as suffixes instead of phrases. |
--date-strong |
Generate strong password‑ready date variants (ordinals, specials, separators). |
--date-strong-as-suffix |
Append strong date variants as suffixes instead of phrases. |
| Sample mode | |
--sample N |
Print first N generated lines to stdout (no file output). |
python3 wordlist-maker.py \
--scrape "acme" "robotics" \
--scrape-limit 25 \
--phrases "AcmeCorp" "admin" \
--date-strong 1/4/2005 \
--max-len 2 \
--dedup \
--count 20000 \
--output acme_wordlist.txtpython3 wordlist-maker.py \
--phrases "John" "Doe" "password" \
--date-strong 15/3/1990 \
--date-strong-as-suffix \
--specials '!' '?' '#' \
--count 10000 \
--output john_birthday.txtpython3 wordlist-maker.py \
--phrases "admin" "root" "user" \
--exhaustive \
--max-len 2 \
--separators '' '_' \
--no-specials \
--output exhaustive_admin.txtpython3 wordlist-maker.py \
--phrases "football" "soccer" "team" \
--max-len 2 \
--stream \
--count 5000000 \
--output huge_sports.txtpython3 wordlist-maker.py --phrases-file my_phrases.txt --count 5000 --output from_file.txt- Phrase list – built from manual entries, a file, scraped keywords, or date generators.
- Base strings – for multiple phrases, all ordered permutations (length 2..max_len) joined by separators.
- Mutation – each base string gets a random case transformation and an optional suffix (number, special char, or both).
- Output – written to a text file (one entry per line). Streaming mode writes immediately; set mode stores in memory for deduplication.
- Exhaustive mode – bypasses randomness and generates every possible case + suffix combination deterministically.
- Web scraping relies on
relatedwords.io– the site’s HTML structure may change. If scraping fails, try a different keyword or install the required libraries. - Rate limiting – the script adds a 0.5s delay between scrape requests to be polite.
- Exhaustive mode can generate enormous lists. For a single 6‑letter word with the default numbers (approx. 200) and specials (15), exhaustive mode yields roughly
6 × (1 + 200 + 15 + 200×15 + 15×200) ≈ 6 × 6,430 = 38,580entries. With multiple words and separators, it grows quickly – use with caution. - Deduplication (
--dedup) uses a Pythonset; for very large counts, prefer--streamto avoid memory issues. - Randomness – use
--seedto make random‑mode output reproducible. - Sample mode (
--sample) prints to stdout and ignores--output– a warning is shown. - Short Hash Suffix - MD5 is not used for cryptographic purposes in this script. It's in place to generate a short hash suffix to avoid filename collision.
This script is provided for educational purposes – use responsibly and only on systems you own or have explicit permission to test.