{"id":13531988,"url":"https://github.com/tp7309/TTPassGen","last_synced_at":"2025-04-01T20:31:10.232Z","repository":{"id":50044941,"uuid":"93056707","full_name":"tp7309/TTPassGen","owner":"tp7309","description":"密码生成 flexible and scriptable password dictionary generator which can support brute-force、combination、complex rule mode etc...","archived":false,"fork":false,"pushed_at":"2023-10-30T13:59:55.000Z","size":12730,"stargazers_count":155,"open_issues_count":0,"forks_count":25,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-03T20:41:24.340Z","etag":null,"topics":["brute-force","crunch","generator","hashcat","john","password","password-dictionaries","password-generator","word","wordlist","wordlist-generator"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tp7309.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://www.paypal.com/paypalme/tp7309","https://user-images.githubusercontent.com/5046191/118354036-b075ca80-b59b-11eb-862e-ffd1b8e1659f.png"]}},"created_at":"2017-06-01T12:50:13.000Z","updated_at":"2025-02-24T05:43:43.000Z","dependencies_parsed_at":"2024-01-24T12:23:45.148Z","dependency_job_id":null,"html_url":"https://github.com/tp7309/TTPassGen","commit_stats":{"total_commits":154,"total_committers":5,"mean_commits":30.8,"dds":"0.43506493506493504","last_synced_commit":"bafca67ee7449bfa3b41a7298217e15d16c4abfb"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tp7309%2FTTPassGen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tp7309%2FTTPassGen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tp7309%2FTTPassGen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tp7309%2FTTPassGen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tp7309","download_url":"https://codeload.github.com/tp7309/TTPassGen/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246709923,"owners_count":20821297,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["brute-force","crunch","generator","hashcat","john","password","password-dictionaries","password-generator","word","wordlist","wordlist-generator"],"created_at":"2024-08-01T07:01:07.441Z","updated_at":"2025-04-01T20:31:05.222Z","avatar_url":"https://github.com/tp7309.png","language":"Python","funding_links":["https://www.paypal.com/paypalme/tp7309","https://user-images.githubusercontent.com/5046191/118354036-b075ca80-b59b-11eb-862e-ffd1b8e1659f.png"],"categories":["Wordlist tools"],"sub_categories":["Generation/Manipulation"],"readme":"# TTPassGen\n\n[![build](https://github.com/tp7309/TTPassGen/actions/workflows/build.yaml/badge.svg)](https://github.com/tp7309/TTPassGen/actions/workflows/build.yaml)\n[![codecov](https://codecov.io/gh/tp7309/TTPassGen/branch/master/graph/badge.svg?token=lyEWTqfeb9)](https://codecov.io/gh/tp7309/TTPassGen)\n[![DeepSource](https://deepsource.io/gh/tp7309/TTPassGen.svg/?label=active+issues\u0026show_trend=true)](https://deepsource.io/gh/tp7309/TTPassGen/?ref=repository-badge)\n[![Rawsec's CyberSecurity Inventory](https://inventory.raw.pm/img/badges/Rawsec-inventoried-FF5050_flat.svg)](https://inventory.raw.pm/tools.html#TTPassGen)\n[![BlackArch package](https://repology.org/badge/version-for-repo/blackarch/ttpassgen.svg)](https://repology.org/project/ttpassgen/versions)\n\nTTPassGen is a highly flexible and scriptable password dictionary generator base on Python, you can easily use various rules to generate the desired combination of words.\n\nREADME i18n: [中文说明](https://github.com/tp7309/TTPassGen/blob/master/README_zh_CN.md)\n\n# Features\n\n- generate password use combination、permulation、conditional rules and so on.\n- support all characters or words(from wordlist option) that can make up a password, some built-in charset has been provided, such as lowercase letter list and numeric list.\n- you can specify the order and frequency of each element in the password.\n- simple rule format, and easy to use, rule could be defined similar regex's style.\n- time-consuming estimate, output size estimate, and progress report.\n- unicode word support by using wordlist option.\n- generation of large amount of passwords at once, no output size limit.\n- support split output by file size.\n\n# Install\n\n`TTPassGen` can be easily installed using pip:\n\n```\npip install ttpassgen\n```\n\n# Requirements\n\nPython 3.5 or later. if you are using windows, you could just use the [release version](https://github.com/tp7309/TTPassGen/releases), no need python environment.\n\n# Quick Start\n\n\u003e Switch to the project's `ttpassgen` directory if you want use ttpassgen by downloaded source code.\n\nExample: Generate word list and output to `out.txt`, the word start with numbers, only allow 1、2、3, appear 2 or 3 times, end with `xyz`.\n\n```\nttpassgen -r '[123]{2:3}xyz' out.txt\n```\n\nDone.\n\n# Options\n\n```\nC:\\Users\\tp730\u003ettpassgen --help\nUsage: ttpassgen [OPTIONS] OUTPUT\nOptions:\n  -m, --mode INTEGER             generation mode:\n\n                                 0 = combination rule mode\n                                 [default: 0]\n  -d, --dictlist TEXT            read wordlist from the file, multi files\n                                 should by seperated by comma.\n  -r, --rule TEXT                define word format, $0 means refer first\n                                 file in dictlist option, some built-in char arrays:\n\n                                 ?l = abcdefghijklmnopqrstuvwxyz\n                                 ?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ\n                                 ?d = 0123456789\n                                 ?s = !\"#$%\u0026'()*+,-./:;\u003c=\u003e?@[\\]^_`{|}~\n                                 ?a = ?l?u?d?s\n                                 ?q = ]\n\n                                 example: [?dA]{1:2}$0\n                                 view *RuleTypes* section for more information.\n                                 [default: '']\n  -c, --dict_cache INTEGER       each element in 'dictlist' option represents\n                                 a dict file path, this option define the\n                                 maximum amount of memory(MB) that can be used,\n                                 increasing this value when the file is large\n                                 may increase the build speed.  [default: 500]\n  -g, --global_repeat_mode TEXT  global repeat mode, the value is used when the repeat mode of rule is not specified:\n\n                                 ? = 0 or 1 repetitions\n                                 * = 0 or more repetitions\n                                 [default: ?]\n  -p, --part_size INTEGER        when result data is huge, split package\n                                 size(MB) will be applied, 0 is unlimited.\n                                 [default: 0]\n  -a, --append_mode INTEGER      whether append content to OUTPUT or not.\n                                 [default: 0]\n  -s, --seperator TEXT           wword seperator for output file, by default, Mac/Linudx: \\n, Windows: \\r\\n\".\n                                 [default: Mac/Linux: \\n, Windows: \\r\\n]\n  --inencoding TEXT              dict file encoding.\n  --outencoding TEXT             output file encoding.  [default: utf-8]\n  --help                         Show this message and exit.\n```\n\nThe output file uses `utf-8` encoding by default, it is recommended to use _Notepad++_ to open this file.\n\n# RuleTypes\n\n**TTPassGen** supports three rule type, which can specified with the `--rule` option, you can use these rules at the same time.\n\n## CharArrayRule\n\nGenerate a word based on the defined char array and repeat information.\nRule format：\n\n```\n[]{min_repeat:max_repeat:repeat_mode}\n```\n\n### CharArray\n\nUse **[]** to wrap all chars.\n\nBuilt-in char arrays:\n\n```\n//lowercase letters\n?l = abcdefghijklmnopqrstuvwxyz\n\n//Uppercase letters\n?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ\n\n//Number list\n?d = 0123456789\n\n//Special character list\n?s = !\"#$%\u0026'()*+,-./:;\u003c=\u003e?@[\\]^_`{|}~\n\n//A collection of the above list\n?a = ?l?u?d?s\n\n//']', chars are wrapped with '[]', so if what put ']' into '[]', use '?q' instead of ']'.\n?q = ]\n```\n\nFor example, **[?d]** means to select char from number list.\n\n### RepeatFormat\n\n```\n{min_repeat:max_repeat:repeat_mode}\n```\n\nFor `CharArrayRule`, repeat times is the length of the word to be generated.\n\n- `min_repeat`\n  minimum repeat times\n- `max_repeat`\n  maximum repeat times\n- `repeat_mode`\n  char repeat mode\n\nDefine rule similar regex's style:\n\n**[]** 1 repetitions.\n`[123] -\u003e 1 2 3`\n\n**[]?** 0 or 1 repetitions.\n`[123]? -\u003e '' 1 2 3`\n\n**[]{m:n:r}** repeat `m` to `n` times.\nRepeat mode support `?` and `*`.\n\n- repeatMode is '?', each char appears 0 or 1 times in word.\n\n  `[123]{1:2:?} -\u003e 1 2 3 12 13 21 23 31 32`\n\n- repeatMode is '\\*', each char appears 0 or more times in word.\n\n  `[123]{1:2:*} -\u003e 1 2 3 11 12 13 21 22 23 31 32 33`\n\nShort rule format:\n\n- **[]{m:n}**\n\n  same as `[]{m:n:global_repeat_mode}`\n\n- **[]{n}**\n\n  same as `[]{n:n:global_repeat_mode}`\n\n- **[]{n:r}**\n\n  same as `[]{n:n:r}`\n\n### Example\n\nGenerate 8-digit numeric password:\n\n```\n[?d]{8:8:*} or [?d]{8:*} or [1234567890]{8:8:*}\n```\n\nGenerate an 8-digit numeric password, and each char in the password can appear at most once. Because the default value of `global repeat mode` is '?', so you can skip set repeat_mode:\n\n```\n[?d]{8:8:?} or [?d]{8}\n```\n\nGenerate a password of 7 to 8 digits in length. The word can be composed of upper and lower case letters, numbers, and `_`:\n\n```\n[?l?u?d_]{7:8:*}\n```\n\nUse characters 1, 2, and 3 to generate a 4-digit password, and each character can appear at most once in each word:\n\n```\n[123]{4}  //Error! the length of word cannot be greater than the char array size.\n[123]{2}[123]{2}  //Correct.\n```\n\n## StringArrayRule\n\nGenerate a word based on the defined string array and repeat information.\nRule format：\n\n- `$(string1,string2){min_repeat:max_repeat:repeat_mode}`\n\n  String array, each string is splited by comma, no spaces.\n\n- `string`\n\n  Normal string, same as `$(string){1:1:?}`.\n\nLike `CharArrayRule`, but `StringArrayRule` does not support `Short rule format`.\n\n### Example\n\nGenerate an 8-digit numeric password, end with `abc`:\n\n```\n[?d]{8:8:*}abc\n```\n\nChoose a number from (10,20,30), then append it after 'age':\n\n```\nage$(10,20,30){1:1:?}\n```\n\nChoose a number from (10,20,30), then append it after 'age', end with 'x' or 'y':\n\n```\nage$(10,20,30){1:1:?}[xy]\n```\n\n## DictRule\n\nRead string from file(txt file). The dictionary file path can be specified by the `--dictlist` option. For example,`$0` means to refer 0th dictionary file.\n\nRule format:\n\n```\n$index\n```\n\n`DictRule` not support repeat mode.\n\n### Example\n\ncontent of `in.txt`:\n\n```\nab\ncd\n```\n\ncontent of `in2.txt`:\n\n```\n12\n34\n```\n\nWhen `--dictlist` option defined as `in.txt,in2.txt` and _seperator_ is one space, run following command：\n\n```diff\n- IMPORTANT\n```\n\n```bash\n# use single quotes\nttpassgen --dictlist \"in.txt,in2.txt\" --rule '$0[_]?$1' -s \" \" out.txt\n# OR in bash shell\nttpassgen --dictlist \"in.txt,in2.txt\" --rule \"\\$0[_]?\\$1\" -s \" \" out.txt\n# OR in Windows Command Prompt\nttpassgen --dictlist \"in.txt,in2.txt\" --rule \"$0[_]?$1\" -s \" \" out.txt\n# OR in PowerShell\nttpassgen --dictlist \"in.txt,in2.txt\" --rule \"`$0[_]?`$1\" -s \" \" out.txt\n```\n\nOutput:\n\n```\nab12 ab34 ab_12 ab_34 cd12 cd34 cd_12 cd_34\n```\n\n## Donate\n\nBuy a cup of coffee for me (Scan by wechat)：\n\n![qrcode](https://user-images.githubusercontent.com/5046191/118354036-b075ca80-b59b-11eb-862e-ffd1b8e1659f.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftp7309%2FTTPassGen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftp7309%2FTTPassGen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftp7309%2FTTPassGen/lists"}