构建密码生成器后,我得到了一些令人惊叹的评论,其中有两条对我来说很突出: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中文网其他相关文章!