Skip to content

Instantly share code, notes, and snippets.

@yimingliu
Last active September 28, 2020 03:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yimingliu/6164b6471111e5ce738d290bdc4e4a98 to your computer and use it in GitHub Desktop.
Save yimingliu/6164b6471111e5ce738d290bdc4e4a98 to your computer and use it in GitHub Desktop.
script to generate password tokens of arbitrary length
#!/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