Python 戦闘 - パスワードジェネレーター

必要

日常生活では、仕事や生活上の必要性から、たくさんのアカウントを登録し、たくさんのパスワードを作成する必要があります。トラブルを避けるためにすべてのアカウントに同じパスワードを使用する人もいますが、これは非常に安全ではありません。アカウントまたは対応するプラットフォームに問題が発生すると、非常に面倒ですが、アカウントごとに新しいパスワードを作成する必要があります。とても頭が痛いです。

この記事の実際の目的は、Python を使用してパスワード ジェネレーターを実装することであり、これは 2 つの状況に分けられます。クラスは文字-数字-特殊文字: 5:3:2)、2 番目のタイプはパスワードの構成や比率に要件がなく、ランダムに生成するだけです。この小さな機能を一緒に実現しましょう。

達成

実装クラスは PasswordGenerator で、選択する文字、数字、特殊文字を表す ALPHA、NUMBER、SPECIAL の 3 つの静的フィールドがあります。ここでは、めんどくさがりなので拡大して文字を書くことはしません。興味のある友達は追加してください。2 つの属性、password_length があり、password はそれぞれパスワードの長さと最終的に生成されたパスワードを表します。静的メソッドgenerate_passがあり、その機能は候補文字列と生成する文字列の長さに応じて、指定された長さの文字列をランダムに生成することです。2 つのスキームfixed_proportion_generateとrandom_generateは、それぞれ固定構成比のパスワード文字列とランダムなパスワード文字列の生成を表します。

クラスの具体的な実装は次のとおりですが、読者の理解を容易にするために、すべての注釈は可能な限り追加されています。

class PasswordGenerator:
    # 候选字母
    ALPHA = "abcdefghijklmnopqrstuvwxyz"
    # 候选数字
    NUMBER = "0123456789"
    # 候选特殊字符
    SPECIAL = "@#$%&*"

    def __init__(self, password_length=8):
        """
        初始化
        :param password_length:
        密码长度,默认为8
        """
        self.password_length = password_length
        # 存放生成的密码
        self.password = []

    def random_generate(self):
        """
        密码字符、数字、以及特殊字符的比例是随机来生成密码
        :return:
        """
        #  string.ascii_letters :ASCII码,包括字母的大小写(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz)
        #  string.digits :数字字符串 0123456789
        #  string.punctuation :特殊字符字符串 !"#$%&'()*+,-./:;<=>?@[\]^_{|}~
        total = string.ascii_letters + string.digits + string.punctuation
        return "".join(random.sample(total, self.password_length))

    def fixed_proportion_generate(self):
        """
        固定字母——数字——特殊字符的比例
        这里是按照5——3——2的比例来生成密码
        :return:
        """
        alpha_len = self.password_length // 2
        num_len = math.ceil(self.password_length * 30 / 100)
        special_len = self.password_length - (alpha_len + num_len)
        # 生成密码的字母部分
        self.password.append(PasswordGenerator.generate_pass(alpha_len, PasswordGenerator.ALPHA, True))
        # 生成密码的数字部分
        self.password.append(PasswordGenerator.generate_pass(num_len, PasswordGenerator.NUMBER))
        # 生成密码的特殊字符部分
        self.password.append(PasswordGenerator.generate_pass(special_len, PasswordGenerator.SPECIAL))
        gen_password = []
        for i in self.password:
            gen_password.extend(i)
        # 随机打乱生成的密码顺序
        random.shuffle(gen_password)
        # 连接成字符串返回
        return "".join(gen_password)

    @staticmethod
    def generate_pass(length, array, is_alpha=False):
        password = []
        for i in range(length):
            index = random.randint(0, len(array) - 1)
            character = array[index]
            if is_alpha:
                case = random.randint(0, 1)
                if case == 1:
                    character = character.upper()
            password.append(character)
        return password

次に、このクラスを使用してパスワードを生成しましょう。コードは次のとおりです。

if __name__ == '__main__':

    # 使用密码生成器
    pass_len = int(input("请输入密码长度:"))
    is_fixed = bool(input("是否固定比例(true/false):"))
    generator = PasswordGenerator(pass_len)
    gen_password = ''
    if is_fixed:
        gen_password =generator.fixed_proportion_generate()
    else:
        gen_password = generator.random_generate()
    print(gen_password)

最終的な効果は以下の通りです。

# 固定比例
>>>请输入密码长度:12
>>>是否固定比例(true/false):true
>>>1HT&6$Fox1B4
# 非固定比例
>>>请输入密码长度:10
>>>是否固定比例(true/false):false
>>>k03$aOM$z5

皆さんもぜひ交流にご注目ください

おすすめ

転載: blog.csdn.net/chen565884393/article/details/127101886