簡體   English   中英

隨機密碼不會選擇用戶選擇的每個條件

[英]random password does not choose every condition that user choose

我想制作一個密碼生成器我讓用戶選擇大寫,數字和符號,但是當我的代碼從短語中選擇隨機密碼時,隨機部分有問題根據用戶選擇的條件,其中一個條件可能不是履行。 例如,所有選擇的短語可能都是小寫的,但用戶已經激活了大寫條件

import  string
import secrets


def random_password_generator(upper=True, digits=True, symbols=False, length=12):
    a_l = string.ascii_lowercase
    a_u = string.ascii_uppercase
    phrase = a_l
    if upper:
        phrase += a_u

    if digits:
        phrase += string.digits

    if symbols:
        phrase += string.punctuation

    password = ''.join(secrets.choice(phrase) for i in range(length))

    return password

a = random_password_generator()
print(a)

secrets.choice(phrase) 從你給它的短語中選擇一個隨機字符。 您執行該操作 10 次。 無法保證在這 10 次中,隨機選擇將屬於您添加到短語中的任何類別。

password = ''.join(secrets.choice(phrase) for i in range(10))

您正在從phrase中選擇十個隨機字母。

即使phrase包含大寫字母作為可能的選擇,也不能保證隨機選擇實際上包含任何大寫字母。 它可能只是隨機選擇所有小寫字母。

數字和符號也一樣。

另外,你為什么選擇十個字母? 您忽略了length參數。

取輸入長度並將其划分為符號類別。 從該類別中隨機 select 字符和 append 到密碼。 最后,隨機打亂密碼的所有字符。

可以根據您選擇的一些權重和硬編碼來將輸入長度划分為類別。

例如,如果您要分配以下權重,

類別 重量
5
降低 5
數字 3
符號 2

然后,您可以決定每個類別使用多少個字符。 例如,如果他們要求長度為 12,包括大寫、小寫和數字。 大寫、小寫和數字的總權重為 5 + 5 + 3 = 13,因此 max(( 5 / 13 ) * 12, 1) = 4 個字符應為大寫等。

您決定是否應包含符號的 function 參數稱為symbols 但是,您隨后將string.punctuation分配給具有相同名稱的變量。

這意味着,以下 if 語句if symbol:實際上與if string.punctuation相同,它始終解析為True ,無論您的 symbol 參數在 string.punctuation 分配給它之前攜帶的 boolean 值是什么。

這是您的代碼的固定版本:

import  string
import secrets


def random_password_generator(upper=True, digits=True, include_symbols=False, length=12):
    a_l = string.ascii_lowercase
    a_u = string.ascii_uppercase
    all_symbols = string.punctuation # make sure this is a different variable
    phrase = a_l
    if upper:
        phrase += a_u

    if digits:
        phrase += string.digits

    if include_symbols:
        phrase += all_symbols

    password = ''.join(secrets.choice(phrase) for i in range(10))

    return password

a = random_password_generator()
print(a)

我希望這是可以理解的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM