Python 随机密码生成器

2025年3月17日 | 阅读 27 分钟

在下面的教程中,我们将在 Python 中构建一个随机密码生成器。"随机密码生成器"是一个程序,它将在字母、数字和符号的帮助下生成指定长度的强随机密码。让我们首先了解先决条件并建立程序的直觉,以便实现变得更简单。

但在我们开始之前,需要对 Python 编程语言有很好的了解,并且清楚地理解随机模块和数据结构,才能在 Python 中构建一个随机密码生成器。

我们将利用以下内容

  1. 字符串数据结构,
  2. 列表数据结构,
  3. 循环(for 循环和 while 循环)

我们将主要使用 random 模块——一个内置的 Python 模块,用于生成随机对象。我们将利用随机模块的各种方法,从字母、数字和符号列表中随机选择密码字母。

此外,对 Tkinter 模块及其相关方法的基本理解,在实现 Python 中构建随机密码生成器的图形用户界面 (GUI) 方法时将非常有用。

现在,让我们来理解在 Python 中开发随机密码生成器的完整概念和所需步骤。

理解开发随机密码生成器的概念

开发“Python 中的随机密码生成器”背后的概念非常简单,其实现分为以下几个步骤

步骤 1: 首先,我们将创建一个包含所有字母(小写和大写)、数字和符号的字符串或列表。

步骤 2: 其次,我们将接受用户输入的所需密码长度。

步骤 3: 最后,我们将使用一个从 0 迭代到密码长度的循环,在每次迭代中,我们将从上面定义的字母集中随机选择一个字母,并将其存储到生成的密码中。

请参考以下部分以获得更好的清晰度和实现

示例输出

假设用户输入的所需密码长度为 8;那么其中一个随机生成的密码将如下图所示

输出

A randomly generated Password is: iE@g#Jq0

理解项目需求

为了在 Python 中构建一个随机密码生成器,我们需要很好地理解 Python 编程,例如运算符、循环和函数的工作方式。我们还将使用一些数据结构,例如字符串、列表等。

此外,我们将使用 Python random 模块的不同方法,这将允许我们随机选择不同的值。random 模块的一些最重要的方法是 randint()、sample()、seed()、choice() 等等。

如果此随机密码生成器程序将使用 random 模块的一些方法。在程序中实现它们之前,让我们简要讨论一下它们。

  1. choice(): choice() 方法被认为是随机模块的有效方法之一。此方法用于从给定序列中选择一个随机值(或数据元素)。此序列可以是任何顺序数据类型,例如字符串、列表、元组或任何其他数字或对象序列。
  2. sample(): sample() 方法用于从给定输入序列中获取随机选择的值序列。sample() 方法用于返回一个唯一选项列表。sample() 方法接受两个参数。第一个参数是必须生成随机序列输出的原始序列。第二个参数是必须生成的随机样本的长度。

在本教程中,我们还将使用 Python Tkinter 模块为程序适配 GUI(图形用户界面)。

由于这两个模块都已预安装为 Python 的标准库,因此无需外部安装它们。

所以,让我们直接进入项目的实现部分。

在 Python 中构建随机密码生成器的步骤

以下是在 Python 中实现随机密码生成器的步骤

第 1 步: 首先,我们将导入所需的模块。

步骤 2: 我们将定义一个函数来使用所有字母数字字符生成密码。

步骤 3: 我们将更新程序以接受密码长度作为用户输入。

步骤 4: 我们将再次更新程序以生成多个密码。

步骤 5: 最后,我们将使用 Tkinter 将图形用户界面 (GUI) 集成到密码生成器中。

现在让我们详细了解上述步骤的实现。

导入所需的模块

我们将从导入 random 模块开始。

以下是演示相同内容的代码片段。

文件:passGen.py

说明

在上面的代码片段中,我们导入了 random 模块。

定义一个函数来使用所有字母数字字符生成密码

现在我们已经将所有必要的模块导入到程序中,是时候开始定义一个函数了,该函数将允许我们在所有字母数字字符的帮助下生成密码。

步骤 1: 我们将首先定义一个函数,该函数将返回一个随机生成的密码。此函数将接受一个参数,表示要生成的密码的长度。

步骤 2: 我们将创建一个包含所有字母(小写和大写)、数字和符号的字符串或列表。

步骤 3: 我们将初始化一个空字符串来存储随机选择的密码。

步骤 4: 最后,我们将运行一个从 0 迭代到密码长度的循环。我们将在 random.choice() 方法的帮助下从字符列表中随机选择一个字符,并将选择的字符添加到密码字符串中。最后,我们将返回密码字符串。

让我们考虑以下说明相同内容的代码片段。

文件:passGen.py

输出

A randomly generated Password is: &xCC@5X)

说明

正如我们从上面的输出中可以看到的,生成的密码有一些重复字符。然而,我们可以在 random 模块的 sample() 方法的帮助下生成一个由唯一字符组成的密码。sample() 方法只从给定序列中选择唯一值。所需密码序列的长度可以稍后指定。因此,我们将把 len 的值提供给 sample() 方法,这样我们就无需使用循环。

让我们考虑下面的代码片段,以更好地理解其实现。

文件:passGen.py

输出

A randomly generated Password is: LAz%^Ugq

更新程序以接受用户输入的密码长度

现在我们已经定义了函数,我们需要生成一个给定长度的密码,是时候对程序进行调整了。正如在之前的程序中观察到的,我们已显式添加了所需密码的长度。我们还可以使用 Python 中的 input() 方法接受用户的密码长度。

让我们考虑以下说明相同内容的代码片段。

文件:passGen.py

输出

Enter the length of the Password: 8 
A randomly generated Password is: Fa!wH67X

更新程序以生成多个密码

我们现在将再次更新程序,使用前面讨论的相同逻辑生成多个密码。

要生成多个随机密码,我们可以向程序添加一个无限循环,该循环将接受所需密码的长度并生成密码。我们可以问一个简单的问题,询问用户是否要生成密码或退出程序。

让我们考虑以下演示相同内容的代码片段。

文件:passGen.py

输出

Do you wish to generate a Password?
Press 'Y/y' to Continue, or 'N/n' to Exit: Y
Enter the length of the Password: 8  
A randomly generated Password is: Pm@p^#61

Do you wish to generate a Password?
Press 'Y/y' to Continue, or 'N/n' to Exit: y
Enter the length of the Password: 12
A randomly generated Password is: *5&7MAOdrz)Q

Do you wish to generate a Password?
Press 'Y/y' to Continue, or 'N/n' to Exit: w
Invalid Input! Try Again.

Do you wish to generate a Password?
Press 'Y/y' to Continue, or 'N/n' to Exit: Y
Enter the length of the Password: 10
A randomly generated Password is: )w1veSlXsP

Do you wish to generate a Password?
Press 'Y/y' to Continue, or 'N/n' to Exit: n
Thank You! See you next time.

使用 Tkinter 将 GUI 集成到密码生成器中

Tkinter 是一个标准的 Python 库,用于在 Python 中开发 GUI 应用程序。

以下是我们将遵循的步骤,以使用 Tkinter 包将 GUI 集成到密码生成器中

步骤 1: 导入所需的模块。

步骤 2: 定义必要的函数。

步骤 3: 为应用程序创建主窗口。

步骤 4: 将小部件添加到窗口。

步骤 5: 运行应用程序。

现在让我们详细了解以上步骤。

导入必要的模块

我们将导入随机模块以及 Tkinter 模块中的模块和小部件。除了这些模块之外,我们还必须从 Tkinter 导入 messagebox 模块。messagebox 模块用于在消息框中显示任何错误、警告和重要消息。

让我们考虑下面的代码片段来理解它的实现。

文件:main.py

说明

在上面的代码片段中,我们导入了 random 模块。我们还从 Tkinter 包中导入了所有内容。然后,我们从 Tkinter 包中将 messagebox 模块导入为 mb

定义所需函数

现在我们已经导入了所需的模块,我们必须定义在应用程序中实现不同操作所需的函数。我们将定义函数来生成密码,检查选择是否合适,检索密码的长度,以及重置应用程序中的所有内容。

让我们详细了解这些函数的实现。

生成密码的函数

我们将从定义一个函数来生成给定长度的密码开始。由于我们已经定义了此函数,我们将对其进行一些细微调整,以便它可以在标签中显示生成的密码字符串。

让我们考虑以下说明相同内容的代码片段。

文件:main.py

说明

在上面的代码片段中,我们更新了 generate_password() 函数,使用定义标签小部件上的 config() 方法在标签中显示生成的密码字符串。我们还使用 print() 方法在命令行中打印了生成的字符串。

检查用户选择的函数

现在我们将定义一个函数,该函数将检查用户是否从给定选项中进行了任何选择。此函数将检索密码的当前长度值,并将其传递给函数,以在它不等于初始值时生成特定长度的密码。

让我们考虑下面的代码片段来理解它的实现。

文件:main.py

说明

在上面的代码片段中,我们定义了一个名为 selection() 的函数。在该函数内部,我们使用 IntVar() 类的对象上的 get() 方法检索了密码长度。然后,我们使用 if-else 条件语句将长度的当前值与其初始值进行了比较。如果长度不为 0(初始值),我们调用了 generate_password() 方法,并将长度作为函数的参数传递;否则,将弹出一个消息框,指示错误,我们使用 Tkintermessagebox 模块的 showerror() 方法实现了该错误。

检索密码长度的函数

现在我们将定义一个函数来检索密码的长度。这是一个可选函数,我们将用它来在命令行中打印选定的密码长度。此函数还将帮助我们启用单选按钮的切换功能。

让我们考虑以下演示相同内容的代码片段。

文件:main.py

说明

在上面的代码片段中,我们定义了一个名为 get_length() 的函数。在此函数中,我们使用 print() 方法打印了选定的密码长度。

重置应用程序中所有内容的函数

我们定义的最后一个函数将允许我们重置应用程序中的所有内容。此函数将清除标签中生成的密码,并取消选择应用程序中任何选定的单选按钮。

让我们考虑以下说明相同内容的代码片段。

文件:main.py

说明

在上面的代码片段中,我们定义了一个名为 reset() 的函数。在此函数中,我们在 IntVar() 类的对象中设置了密码长度的初始值。我们还使用了 config() 方法来配置标签中的初始文本。

创建应用程序的主窗口屏幕

现在我们已经定义了在应用程序中实现不同操作所需的所有必要函数,是时候创建主窗口屏幕了。为了实现此目标,我们将创建 tkinter 模块的 Tk() 类的对象。此类的对象将创建一个 GUI 窗口屏幕,我们可以在其中稍后添加小部件。我们还将配置创建窗口的标题、大小和位置,以及背景颜色和图标。

让我们考虑以下说明相同内容的代码片段。

文件:main.py

说明

在上面的代码片段中,我们通过实例化 tkinterTk() 类创建了一个窗口。我们还使用 title() 方法设置了窗口的标题。我们还使用 geometry() 方法设置了窗口的大小和位置。然后,我们使用 config() 方法将窗口的背景颜色配置为 #E6E6FA。最后,我们使用 iconbitmap() 方法为应用程序设置了图标。

向应用程序添加小部件并设置事件触发器

现在我们将在应用程序中添加所需的小部件以触发不同的事件。我们将使用框架以适当的方式组织其他小部件,如标签、按钮和单选按钮。

所以,让我们深入了解这些小部件的添加。

添加框架

我们将首先向主窗口添加框架。这些框架将有助于构建其他控件。可以使用 tkinter 模块的 Frame() 控件创建这些框架。

让我们考虑以下演示相同内容的代码片段。

文件:main.py

说明

在上面的代码片段中,我们使用 Frame() 小部件向窗口添加框架。我们还将前两个框架的 master 参数设置为 gui_root,表示窗口的左右两侧。我们通过将其设置为 bg 参数的值来配置背景颜色。最后,我们使用 pack() 方法设置了这些框架的位置。

现在我们已经将框架添加到应用程序中,是时候将剩余的小部件(如标签、输入字段、选项菜单、按钮和表格)添加到它们各自的框架中了。

将小部件添加到 heading_frame 框架

我们将首先向第一个框架,即 heading_frame 添加一些标签。这些标签将包括应用程序的标题和说明应用程序工作方式的副标题。我们将使用 tkinter 模块的 Label() 小部件创建所需的标签。

让我们考虑以下演示相同内容的代码片段。

文件:main.py

说明

在上面的代码片段中,我们使用了 Label() 小部件来创建所需的标签。然后,我们将这些标签的 master 参数设置为 heading_frame 框架。我们还指定了要显示的文本、字体样式、背景和前景颜色。最后,我们使用了 pack() 方法来设置上述标签的位置。

将小部件添加到 radiobtn_frame 框架

现在我们将向窗口的 radiobtn_frame 框架添加一些单选按钮。我们将使用 tkinter 模块的 Radiobutton() 小部件。我们还将创建一个 IntVar() 类的对象,其中将存储密码的长度,无论用户何时选择任何单选按钮。

让我们考虑下面的代码片段,以说明其实现。

文件:main.py

说明

在上面的代码片段中,我们创建了一个 IntVar() 类的对象来存储密码的长度,并使用 set() 方法将其初始值设置为 0。然后,我们使用了 Radiobutton() 小部件来创建一些单选按钮,并将其 master 参数的值设置为 radiobtn_frame。我们还自定义了其内容、变量、值、字体、背景颜色以及它们将调用的函数。最后,我们使用了 grid() 方法以网格格式设置这些单选按钮的位置。

将小部件添加到 button_frame 框架

现在我们将在应用程序中添加一些按钮来触发函数。我们可以使用 tkinter 模块的 Button() 小部件创建按钮。

让我们考虑以下说明相同内容的代码片段。

文件:main.py

说明

在上面的代码片段中,我们使用了 Button() 小部件来创建一些按钮,并将其 master 参数设置为 button_frame。我们还配置了文本、字体样式、宽度、背景和前景颜色以及这些按钮将调用的函数。最后,我们使用了 grid() 方法以网格格式设置这些按钮的位置。

将小部件添加到 result_frame 框架

现在我们将添加一个标签来显示生成的密码。

让我们考虑以下说明相同内容的代码片段。

文件:main.py

说明

在上面的代码片段中,我们使用 Label() 小部件创建了一个标签,并将其 master 参数设置为 result_frame。我们最初将其文本设置为空字符串,并自定义了其字体样式、背景和前景颜色。最后,我们使用了 pack() 方法来设置标签的位置。

运行应用程序

现在我们已经定义了所有必要的函数,创建了应用程序的主窗口,并向窗口添加了所需的小部件,是时候最终使用 tkintermainloop() 方法运行应用程序了。

让我们考虑以下演示相同内容的代码片段。

文件:main.py

说明

在上面的代码片段中,我们使用 gui_rootTk() 类的对象)调用了 tkintermainloop() 方法来运行应用程序。

因此,项目代码现在已完成。我们将保存此 python 程序文件并在命令提示符或终端中运行以下命令以查看输出。

语法

但在我们查看输出之前,下面显示了“随机密码生成器”的完整程序代码。

Python 中随机密码生成器的完整程序代码

以下是“Python 中的随机密码生成器”的完整程序代码。

文件:main.py

输出

作为 GUI

Random Password Generator in Python

在命令行中

我们为什么要创建随机密码生成器?

在当今世界,数据和安全是首要关注的问题,一个好的强密码至关重要。人们通常使用容易被黑客入侵以获取其数据的常见密码。

学习任何编程语言的更好方法是实际操作。特别是开发一个好的初学者项目,例如 Python 中的随机密码生成器,有助于我们提高基础知识。这个项目还使我们能够理解 Python 不同标准和外部模块的使用。

如何在 Python 中生成强密码?

在本教程中,我们讨论了在 Python 中开发随机密码生成器的不同方法。为了生成更强的密码,我们可以使用 sample() 方法代替 choice() 方法,以确保数字不重复。我们可以要求用户输入密码中所需的字符、数字和符号的数量。

让我们考虑以下示例来理解其实现。

示例

输出

Enter the Number of the Characters that you need in the password : 5
Enter the Number of the Numbers that you need in the password : 6
Enter the Number of the Symbols that you need in the password : 5
The Randomly Generated Password is : 1*53Tp%@64B)rV!0

说明

在上面的代码片段中,我们导入了 random 模块。然后,我们定义了一个名为 password_generator() 的函数,该函数接受字符、数字和符号的长度。我们在此函数中定义了一个字符、数字和符号列表,并使用 random.sample() 方法随机选择给定长度的字符、数字和符号列表。然后,我们创建了一个表示密码的列表,并使用 random.shuffle() 方法打乱列表的元素。然后,我们将最终列表转换为包含所需密码的字符串并返回。在主函数中,我们使用 input() 方法询问用户密码中所需的字符、数字和符号的长度。最后,我们通过传递所有三个长度作为所需参数来调用 password_generator() 方法,并为用户打印生成的密码。

结论

  • 随机密码生成器是一个能够生成指定长度的强随机密码的程序,由字母、数字和符号组合而成。
  • 在本教程中,我们学习了使用 Python 作为编程语言开发随机密码生成器的不同方法。
  • 我们还学习了 random 的不同方法的使用
  • 我们还观察了 Tkinter 模块用于为随机密码生成器创建图形用户界面 (GUI) 的使用。
  • 最后,我们讨论了创建随机密码生成器的原因以及如何使用此应用程序生成强密码。