Skip to content
flexiable and scriptable password dictionary generator which can support brute-force、combination、complex rule mode etc...
Branch: master
Clone or download
Latest commit e4cbb2a May 5, 2019


Build Status Coverage Status Codacy Badge Rawsec's CyberSecurity Inventory

TTPassGen is a highly flexiable and scriptable password dictionary generator base on Python, you can easily use various rules to generate the desired combination of words.

README i18n: 中文说明


  • generate password use combination、permulation、conditional rules and so on.
  • support all characters or words(from wordlist option) that can make up a password, some built-in charset has been provided, such as alphabetical list and numeric list.
  • you can specify the order and frequency of each element in the word.
  • simple rule format, and easy to use, rule could be defined similar regex's style.
  • time-consuming estimates, output size estimates, and real-time progress reports.
  • unicode word support by using wordlist option.
  • generation of large amounts of passwords at once, no output size limit.
  • support split output by file size.


TTPassGen can be easily installed using pip:

pip install ttpassgen

if you are using the windows operating system, you could just use the release version.


Python 3.5 or later.

Quick Start

Switch to the project's ttpassgen directory if you want use ttpassgen by downloaded source code.

Example: Generate word list output to out.dict, the word format is prefix three digits, only allow 1、2、3, appear 2 or 3 times, followed by letter a or b.

ttpassgen -r [123]{2:3}[ab] out.dict



C:\Users\tp730>ttpassgen --help
Usage: ttpassgen [OPTIONS] OUTPUT
  -m, --mode INTEGER             generation mode:

                                 0 = combination rule mode
                                 [default: 0]
  -d, --dictlist TEXT            read wordlist from the file, multi files
                                 should by seperated by comma.
  -r, --rule TEXT                define word format, $0 means refer first
                                 file in dictlist option, some built-in charsets:

                                 ?l = abcdefghijklmnopqrstuvwxyz
                                 ?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ
                                 ?d = 0123456789
                                 ?s = !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
                                 ?a = ?l?u?d?s
                                 ?q = ]

                                 example: [?dA]{1:2}$0
                                 view *Examples* section for more information.
                                 [default: '']
  -c, --dict_cache INTEGER       each element in 'dictlist' option represents
                                 a dict file path, this option define the
                                 maximum amount of memory(MB) that can be used,
                                 increasing this value when the file is large 
                                 may increase the build speed.  [default: 500]
  -g, --global_repeat_mode TEXT  whether the character is allowd to repeat:

                                 ? = 0 or 1 repetitions
                                 * = 0 or more repetitions
                                 [default: ?]
  -p, --part_size INTEGER        when result data is huge, split package
                                 size(MB) will be applied, 0 is unlimited.
                                 [default: 0]
  -a, --append_mode INTEGER      whether append content to OUTPUT or not.
                                 [default: 0]
  -s, --seperator TEXT           word seperator, by default, each word
                                 occupies one line.
                                 [default: Mac/Linux: \n, Windows: \r\n]
  --inencoding TEXT              dict file encoding.
  --outencoding TEXT             output file encoding.  [default: utf-8]
  --help                         Show this message and exit.

generated password displayed line by line in OUTPUT. It is recommended to use Notepad++ to open this file(utf-8).


[] Used to wrap charset.

Repeat mode

[] 1 repetitions. [123] -> 1 2 3

[]? 0 or 1 repetitions. [123]? -> '' 1 2 3


when repeatMode is '?', [123]{1:2:?} -> 1 2 3 12 13 21 23 31 32
when repeatMode is '*', [123]{1:2:*} -> 1 2 3 11 12 13 21 22 23 31 32 33

[]{m:n} default use global_repeat_mode option.

[]{n} or []{n:r} same as []{n:n:r}.

$no ref dict file index from dictlist option.

ttpassgen --dictlist in.dict,in2.dict --rule $0[_]?$1 -s " " out.dict
when dictlist option defined as `in.dict,in2.dict` and *seperator* is one space,
in.dict content:

in2.dict content:

$0[_]?$1 -> word11word21 word11word22 word11_word21 word11_word22 word12word21 word12word22 word12_word21 word12_word22
You can’t perform that action at this time.