建造密碼產生器後,我得到了一些令人驚嘆的評論,其中有兩條對我來說很突出:Guillaume Ste-Marie 主張使用種子來增加隨機性,Christian Ledermann 也主張使用秘密應該替換隨機,因為隨機並不是真正隨機。
秘密模組產生適用於管理密碼、帳戶驗證、安全性令牌和相關秘密等資料的加密強隨機數。
讓我們先查看安全密碼產生器的完整程式碼。如果它看起來很嚇人,請不要擔心;我們將在下一節中逐行分解它。
import secrets import string def generate_password(length=12): characters = string.ascii_letters + string.digits + string.punctuation password = ''.join(secrets.choice(characters) for _ in range(length)) return password def main(): print("Welcome to the Secure Password Generator!") try: length = int(input("Enter the desired password length: ")) if length <= 0: raise ValueError("Password length must be positive") except ValueError as e: print(f"Invalid input: {e}") print("Using default length of 12 characters.") length = 12 password = generate_password(length) print(f"\nYour generated password is: {password}") if __name__ == "__main__": main()
現在,讓我們分解並詳細檢查每個部分。
import secrets import string
這兩行導入我們的安全密碼產生器所需的模組:
secrets 模組提供了產生適用於管理密碼等機密的加密強隨機數的功能。出於加密目的,它比隨機模組更安全。
字串模組提供包含各種類型字元(字母、數字、標點符號)的常數。這使我們無需手動輸入密碼中可能需要的所有字元。
def generate_password(length=12): characters = string.ascii_letters + string.digits + string.punctuation password = ''.join(secrets.choice(characters) for _ in range(length)) return password
此函數產生我們的安全密碼:
我們建立一個字串字符,其中包含密碼的所有可能字符。
我們使用secrets.choice()從該字串中隨機選擇字元。這比使用 random.choice() 更安全,因為它使用作業系統的加密安全隨機數產生器。
我們將這些字元連接成一個字串來形成我們的密碼。
def main(): print("Welcome to the Secure Password Generator!") try: length = int(input("Enter the desired password length: ")) if length <= 0: raise ValueError("Password length must be positive") except ValueError as e: print(f"Invalid input: {e}") print("Using default length of 12 characters.") length = 12 password = generate_password(length) print(f"\nYour generated password is: {password}")
此函數處理使用者互動:
if __name__ == "__main__": main()
此區塊確保僅在直接執行腳本時才呼叫 main() 函數,而不是作為模組導入時呼叫。
以下是一些進一步改進密碼產生器的想法:
透過使用 Secrets 模組而不是隨機模組,我們創建了一個更安全的密碼產生器。
以上是使用 Secret Lib 建立安全的 Python 密碼產生器的詳細內容。更多資訊請關注PHP中文網其他相關文章!