Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/env python3
- import secrets
- import argparse
- import shutil
- lower = [chr(c) for c in range(ord('a'), ord('z') + 1)]
- upper = [chr(c) for c in range(ord('A'), ord('Z') + 1)]
- number = [chr(c) for c in range(ord('0'), ord('9') + 1)]
- special = """!@#$%^&*()_+{}=-[];,.<>/?'""" + '"'
- def parse_args():
- parser = argparse.ArgumentParser(description='Generate secure passwords with configurable character classes')
- parser.add_argument('-a', help='include lower case letters, default is yes', action='store_true')
- parser.add_argument('-A', help='include upper case letters, default is yes', action='store_true')
- parser.add_argument('-n', help='include numbers, default is yes', action='store_true')
- parser.add_argument('-s', help='include special characters, default is no', action='store_true')
- parser.add_argument('count', help='the number of password to generate, default is 5',
- type=int, default=5, nargs='?')
- parser.add_argument('length', help='the length of the password being generated, default is 16',
- type=int, default=16, nargs='?')
- return parser.parse_args()
- def generate_characters(args):
- if (not args.a and not args.A and not args.n and not args.s):
- return "".join(lower) + "".join(upper) + "".join(number)
- chars = ""
- if args.a:
- chars += "".join(lower)
- if args.A:
- chars += "".join(upper)
- if args.n:
- chars += "".join(number)
- if args.s:
- chars += special
- return chars
- def generate_pw(chars, length):
- return "".join([secrets.choice(chars) for i in range(length)])
- def pretify(pws):
- columns = shutil.get_terminal_size((80,20)).columns
- n = int(columns / (len(pws[0]) + 1))
- rows = [' '.join(pws[i:i + n]) for i in range(0, len(pws), n)]
- return '\n'.join(rows)
- def main():
- args = parse_args()
- chars = generate_characters(args)
- pws = [generate_pw(chars, args.length) for i in range(args.count)]
- print(pretify(pws))
- if __name__ == '__main__':
- main()
Add Comment
Please, Sign In to add comment