Генератор паролей python 3.5

Автор: Igor Kirsanov

Первый вариант генератора

Генератор паролей на python, пример простого рабочего генератора. Не криптостойкий, но для простых задач вполне допустимо использование данного генератора паролей, т.к. значения перемешиваются несколько раз. Начиная с python 3.6 рекомендуется использовать вызов через secrets или использовать модули криптографии

Для генератора задана возможность выбора набора симвлолов для генерации пароля на основе стандартной библиотеки string, "lowercase" - прописные латинские буквы, "uppercase" - заглавные латинские буквы, "digits" - цифры, "punctuation" - знаки понктуации и возможность указания длины пароля.

По умолчанию указаны все способы и длина пароля в 8 символов

#!/usr/bin/env python3
"""Password generator."""
# -*- coding: UTF-8 -*-
import random
import string


def gen(length=8, method=["lowercase", "uppercase", "digits", "punctuation"]):
    """String.lowercase, uppercase, digits, punctuation."""
    pwd = []
    for i in range(length):
        choice = random.choice(method)
        if choice == "lowercase":
            pwd.append(random.choice(string.ascii_lowercase))
        if choice == "uppercase":
            pwd.append(random.choice(string.ascii_uppercase))
        if choice == "digits":
            pwd.append(random.choice(string.digits))
        if choice == "punctuation":
            pwd.append(random.choice(string.punctuation))
        if choice == "string":
            pwd.append(random.choice(string.punctuation))

    random.shuffle(pwd)
    return ''.join(pwd)

# Examples
print (gen())  # /79](g}7L
print (gen(method=["uppercase"]))  # RSLCHWYED
print (gen(method=["digits"]))  # 894157281
print (gen(method=["punctuation"]))  # ~|{-()_**
print (gen(method=["uppercase", "lowercase", "digits"]))  # 0ceA711iq
print (gen(length=15, method=["uppercase", "lowercase", "digits"]))  # 97A3M481njJs1H3B

Второй вариант генератора

Пример генератора паролей из строки символов. Быстро, просто, но не безопасно, когда требуется криптостойкий пароль.

import random
length = 8
passwd = list('1234567890abcdABCD!@#$%^&*()-=_?жзиклпшщя')
random.shuffle(passwd)
passwd = ''.join([random.choice(passwd) for x in range(length)])
print (passwd)  # шкиd69#&

Пароль генерируется из строки символов, в данном примере это '1234567890abcdABCD!@#$%^&*()-=_?жзиклпшщя'. Нужно задать те символы, которые будут использованы для пароля, например '1234567890abcdefghigklmnopqrstuvyxwzABCDEFGHIGKLMNOPQRSTUVYXWZ!@#$%^&*()-=_|/?'