OSINT-based password dictionary generator for authorized security testing
Project description
keygen-dictionary
OSINT-based password dictionary generator for authorized security testing.
Takes personal data (name, date of birth, address, domain, etc.) and produces a targeted wordlist sorted by Shannon entropy — human-like combinations first.
Warning For authorized use only. Only use against systems you own or have explicit written permission to test. The author is not responsible for misuse.
Features
- Interactive mode with guided prompts (
questionary) - One-liner CLI mode via flags — scriptable, no prompts
- YAML config file support for repeatable target profiles
--config-saveto dump session inputs to YAML for reuse- Entropy sort — low-entropy (human-like) candidates first
- Leet speak variants — default
a→4 e→3 i→1 o→0 s→5, fully overridable via--leetor config - Case variants —
.title(),.upper(),.capitalize()generated per token - Common suffixes seeded automatically (
!,123,1234,#1, …) - Min/max length filter to match real password policies
- Streamed output — RAM-safe even at combination level 3+
--dry-runto preview token count before committing-q / --quietfor clean output when piping or scripting
Installation
From PyPI:
pip install keygen-dictionary==1.0.0
From source:
git clone https://github.com/ivanhuay/keygen-dictionary.git
cd keygen-dictionary
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
Requirements: Python 3.10+
Usage
Interactive mode
Run with no flags to enter guided prompts:
keygen-dictionary
keygen-dictionary v1.0.0 — leave any field empty to skip
Combination level: 2
Min password length (0 = no limit): 8
Max password length (0 = no limit): 16
Full name: John Doe
Domain URL: example.com
Birth/important date (dd-mm-yyyy): 01-01-1990
...
Tokens collected : 169
Est. candidates : ~28,730
Sample : !, !!, #1, ...
Proceed with generation? (Y/n)
CLI mode
Pass any data flag to skip interactive prompts entirely:
keygen-dictionary \
--name "John Doe" \
--domain example.com \
--date 01-01-1990 \
--level 2 \
--min-length 8 \
--max-length 16 \
--output wordlist.txt \
--entropy-sort
Multiple values per field:
keygen-dictionary --name "John Doe" --name "Johnny" --additional "fido" --additional "chelsea"
Preview without generating:
keygen-dictionary --name "John Doe" --date 01-01-1990 --dry-run
Custom leet substitutions and quiet output for piping:
keygen-dictionary --name "John Doe" --leet "a:@,s:$" -q --output - | head -20
Config file mode
Create a YAML profile (see config.example.yaml):
name:
- "John Doe"
domain:
- "example.com"
date:
- "01-01-1990"
additional:
- "fido"
level: 2
min_length: 8
max_length: 20
leet_map: # optional — overrides default substitutions
a: "@"
s: "$"
Run against it:
keygen-dictionary --config target.yaml
Save current session inputs to YAML for later reuse:
keygen-dictionary --name "John Doe" --date 01-01-1990 --config-save target.yaml
CLI flags override config values when both are provided.
Output
Candidates are written one per line to pass.txt (or --output FILE).
With --entropy-sort / interactive sort prompt accepted, candidates are reordered
ascending by Shannon entropy — predictable, human-chosen patterns appear first.
This improves hit rate when using the list in a sequential attack.
All flags
usage: keygen-dictionary [-h] [--version] [--config FILE]
[--config-save FILE] [-q]
[--name NAME] [--domain DOMAIN] [--address ADDR]
[--date DATE] [--id ID] [--additional DATA]
[--level N] [--min-length N] [--max-length N]
[--output FILE] [--entropy-sort] [--dry-run]
[--leet MAP]
options:
--config FILE Load target data from YAML config file
--config-save FILE Save collected inputs to YAML after loading
-q, --quiet Suppress all output except final line count
target data (overrides --config):
--name NAME Full name (repeatable)
--domain DOMAIN Domain URL (repeatable)
--address ADDR Address (repeatable)
--date DATE Date dd-mm-yyyy (repeatable)
--id ID ID number (repeatable)
--additional DATA Additional keyword (repeatable)
generation options:
--level N Combination level (default: 2)
--min-length N Min password length
--max-length N Max password length
--output FILE Output file (default: pass.txt)
--entropy-sort Sort output by entropy (RAM-heavy)
--dry-run Show token/candidate count without generating
--leet MAP Custom leet substitutions e.g. "a:@,e:3,s:$"
Contributing
Issues and PRs welcome. See roadmap.md for planned work.
Repository: https://github.com/ivanhuay/keygen-dictionary
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file keygen_dictionary-1.0.1.tar.gz.
File metadata
- Download URL: keygen_dictionary-1.0.1.tar.gz
- Upload date:
- Size: 13.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a468854dc051b34c284601aca0d18d639c82a3adedf64a75d5457e8f6ddb6ac
|
|
| MD5 |
1210d9f7df8462bd16dc78931fe290bc
|
|
| BLAKE2b-256 |
78da923c8a4ec094cd4ae970236013c025713bffc71a90bc91213542894149dc
|
File details
Details for the file keygen_dictionary-1.0.1-py3-none-any.whl.
File metadata
- Download URL: keygen_dictionary-1.0.1-py3-none-any.whl
- Upload date:
- Size: 9.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a091b33247ceb05a1ff7b0d04d601dca6ba4717404d416eb5622a5c851f1d3dd
|
|
| MD5 |
3b06a121d6748899d28bd63838f57f94
|
|
| BLAKE2b-256 |
aebc44041687cc123fe3bb978836562c22372a409148b7415584553ce2c27037
|