Last active
September 28, 2020 03:54
-
-
Save yimingliu/6164b6471111e5ce738d290bdc4e4a98 to your computer and use it in GitHub Desktop.
script to generate password tokens of arbitrary length
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import secrets | |
import string | |
import argparse | |
def gen_pass(length, symbols=None, no_numbers=False, no_upper=False): | |
alphabet = string.ascii_letters | |
if no_upper: | |
alphabet = string.ascii_lowercase | |
if not no_numbers: | |
alphabet += string.digits | |
if symbols: | |
alphabet += symbols | |
while True: | |
secret = ''.join(secrets.choice(alphabet) for i in range(length)) | |
cond = (any(c.islower() for c in secret)) | |
if not no_upper: | |
cond = (cond and any(c.isupper() for c in secret)) | |
if not no_numbers: | |
cond = (cond and (sum(c.isdigit() for c in secret) >= 1)) | |
if symbols: | |
cond = (cond and (sum(c in symbols for c in secret) >= 1)) | |
if cond: | |
break | |
return secret | |
if __name__ == "__main__": | |
parser = argparse.ArgumentParser(description='Generate secrets') | |
parser.add_argument("-n", "--length", type=int, default=12) | |
parser.add_argument("-s", "--symbols", nargs="?", const='/-_+!$#^*.,~', type=str, default=None) | |
parser.add_argument("--no-numbers", action='store_true', default=False) | |
parser.add_argument("--no-upper", action='store_true', default=False) | |
args = parser.parse_args() | |
print(gen_pass(length=args.length, symbols=args.symbols, no_numbers=args.no_numbers, no_upper=args.no_upper)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment