如何在 Python 中创建随机密码生成器

安全是生活中至关重要的组成部分。 随着网络活动的日益普及,安全性显得尤为重要。 当我们谈论安全时,密码自然而然地成为焦点。

本文将介绍如何构建一个密码生成器,帮助我们快速生成随机且强度高的密码。

为什么我们需要密码生成器呢?

因为我们很难立即想到多样化的密码模式。

然而,计算机在这方面表现出色。 计算机可以在数秒内根据我们的自定义设置生成随机且复杂的密码。 市面上已经存在许多密码生成器。

那么,我们能否创建自定义的密码生成器呢?

当然可以。 本文将详细介绍如何实现这一目标。

让我们开始创建一个密码生成器。

密码生成器💻

构建自定义密码生成器的最大好处在于,我们可以根据需要进行调整。

首先,我们将创建一个简单的密码生成器,它会询问密码长度,并生成一个包含数字、字母和特殊字符的随机密码。

接下来,我们将通过询问每种字符类型的数量来改进它,例如数字、字母和特殊字符的个数。

事不宜迟,让我们逐步了解如何使用 Python 构建密码生成器。

步骤

  • 将所有可用字符存储在列表中。 可以利用 Python 的 string 模块,也可以手动输入。
  • 提示用户输入所需的密码长度。
  • 使用 random.shuffle 方法对字符列表进行随机排序。
  • 初始化一个空列表来存储生成的密码。
  • 编写一个循环,重复执行密码长度指定的次数。
    • 使用 random.choice 方法从所有可用字符中随机选择一个字符。
    • 将选定的随机字符添加到密码列表中。
  • 随机打乱生成的密码列表,以增加随机性。
  • 使用 join 方法将密码列表转换为字符串。
  • 打印最终生成的密码。

请按照上述步骤尝试编写代码。 如果遇到困难,请不要担心。 以下提供代码示例。

代码

import string
import random


## 用于生成密码的字符集
characters = list(string.ascii_letters + string.digits + "[email protected]#$%^&*()")

def generate_random_password():
  ## 从用户处获取密码长度
  length = int(input("请输入密码长度: "))

  ## 打乱字符顺序
  random.shuffle(characters)

  ## 从列表中随机选择字符
  password = []
  for i in range(length):
    password.append(random.choice(characters))

  ## 打乱生成的密码
  random.shuffle(password)

  ## 将列表转换为字符串并输出
  print("".join(password))



## 调用函数
generate_random_password()

以上代码浅显易懂。 我们只是按照前面描述的步骤进行了编码。 如果您仔细阅读这些步骤,理解代码应该不会有任何问题。

现在,运行代码并生成密码。 以下是示例输出。

请输入密码长度: 10
d&amIzK%d)

观察以上输出的密码。 它是否包含数字? 并非必然,因为程序不能保证包含数字。

接下来,我们尝试通过要求用户指定所需数字、字母和特殊字符的数量,来确保密码包含数字和特殊字符。

当用户输入每种字符类型的数量时,程序将会在密码中包含相应数量的字符。

让我们看看如何接受每种字符类型的数量并生成密码。

import string
import random


## 用于生成密码的字符集
alphabets = list(string.ascii_letters)
digits = list(string.digits)
special_characters = list("[email protected]#$%^&*()")
characters = list(string.ascii_letters + string.digits + "[email protected]#$%^&*()")

def generate_random_password():
  ## 从用户处获取密码长度
  length = int(input("请输入密码长度: "))

  ## 每种字符类型的数量
  alphabets_count = int(input("请输入密码中字母的数量: "))
  digits_count = int(input("请输入密码中数字的数量: "))
  special_characters_count = int(input("请输入密码中特殊字符的数量: "))

  characters_count = alphabets_count + digits_count + special_characters_count

  ## 检查字符总数是否超过密码长度
  ## 如果总数大于长度,则打印错误信息
  if characters_count > length:
    print("字符总数大于密码长度")
    return


  ## 初始化密码列表
  password = []

  ## 随机选择字母
  for i in range(alphabets_count):
    password.append(random.choice(alphabets))

  ## 随机选择数字
  for i in range(digits_count):
    password.append(random.choice(digits))

  ## 随机选择特殊字符
  for i in range(special_characters_count):
    password.append(random.choice(special_characters))


  ## 如果总字符数小于密码长度
  ## 添加随机字符以使其等于密码长度
  if characters_count < length:
    random.shuffle(characters)
    for i in range(length - characters_count):
      password.append(random.choice(characters))


  ## 打乱生成的密码
  random.shuffle(password)

  ## 将列表转换为字符串并输出
  print("".join(password))



## 调用函数
generate_random_password()

那么,之前的代码和这段代码有什么区别呢?

  • 我们为每种类型的字符编写了单独的循环,以便将其添加到密码中。
  • 加入了两个条件检查来验证字符总数和密码长度。

我们添加了一些额外的代码。 但是,其模式与之前的代码相似。 因此,您应该能够轻松理解它。

现在,是时候执行并检查输出了。 请看下面的示例运行。

请输入密码长度: 10
请输入密码中字母的数量: 3
请输入密码中数字的数量: 2
请输入密码中特殊字符的数量: 3
V2(&#XlQq1

如果您仔细观察这次生成的密码,就会发现它包含用户指定的每种字符类型的最少数量。 并且程序还加入了另外 2 个随机字符,以使密码长度等于用户输入的值。

太棒了! 我们已经成功构建了一个完整的、强大的密码生成器。😎

结论

我们已经学习了如何从头开始创建密码生成器。 我们还可以为其添加更多功能吗? 当然可以,我们可以根据需要添加任意数量的功能。 但是,请务必确保生成的密码足够强大。

利用该代码生成密码,并在您下次注册在线账户时使用。

或者,您也可以使用 techblik.com 上的随机密码生成器来创建安全的密码。

此外,还可以了解如何编写等于或不等于代码以及如何用 Python 构建井字游戏。

编程愉快! 👩‍💻