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

在Python中学习编写密码生成器-使用Python的secrets模块生成安全密码。

Python是一种多功能的编程语言,您可以在自动化、网络开发、数据分析等各种应用中使用它。

您可以使用Python来自动化监控网站、发送电子邮件和生成密码。在本教程中,您将学习如何在Python中创建一个安全和随机的密码生成器。

让我们开始吧…

为什么要在Python中编写密码生成器的3个原因

您是否曾经厌倦过生成安全密码并跟踪它们的过程?以下是您应该考虑在Python中编写密码生成器的原因。

1. 自动化密码生成过程

在您的生活中的一天里,您会访问许多网站-从电子商务网站到学习和编码平台。大多数网站要求您使用凭证登录。这是一个重复的任务,您可以使用Python脚本来自动化。

2. 生成安全密码

想出符合安全约束的强密码可能具有挑战性;不强的普通密码容易受到安全攻击。

您可以使用Python来以编程方式生成安全密码。这样,您可以根据需要运行脚本以生成密码,而不必担心密码是否安全。

3. 将实际项目添加到您的作品集中

如果您是初学者的Python程序员,您应该构建项目来提高您的技能,并通过作品集展示您的编程专业知识。

除了简单的Python脚本外,您还可以进一步定制它,并将其发布为PyPI软件包。您还可以使用诸如Tkinter等库添加图形用户界面,还有许多其他功能!

这样,您可以编写自己的密码生成器-以安全地生成和管理各个站点的密码。

Python中的随机模块:足够安全吗?

Python random module还提供了一些函数,让您从字母表中抽取样本,并构造看似随机的序列。随机模块生成伪随机序列。让我们解析一下伪随机性的含义。

伪随机一词表示,即使序列可能看起来是随机的,但实际上它是确定性的

因此,如果您设置了一个随机种子,那么在您的计算机上,以及对于使用相同种子运行相同脚本的任何人,随机模块将产生相同的序列。

这就是为什么在诸如密码等安全性重要的应用程序中不应使用随机。

那么何时可以使用random模块呢?

对于所有不敏感的应用程序,您可以使用随机模块。例如,一个班级有40名学生,有A、B和C三套试题。您想要为每个学生随机分配一套试题。

在这种情况下,您可以在列表推导表达式中使用random.choice(),如下所示:

import random

papers = ['A','B','C']

q_list = [random.choice(papers) for i in range(40)]
print(q_list)
示例输出:
['A', 'A', 'B', 'B', 'B', 'B', 'B', 'C', 'B', 'A', 'C', 'C', 'B', 
'C', 'A', 'B', 'A', 'A', 'C', 'C', 'A', 'A', 'A', 'C', 'A', 'C', 
'A', 'C', 'B', 'B', 'B', 'B', 'A', 'A', 'B', 'B', 'A', 'A', 'B', 'B']

📑 关键要点:对于统计模拟,您可以使用random模块;对于敏感应用程序,请使用secrets模块。

Python Secrets模块:生成安全密码的关键

Python增强建议(PEP 506)建议开发者在需要加密保护的序列中使用secrets模块,例如密码和安全令牌。

secrets模块有几个内置函数,可以实现以下功能:

  • 生成安全的密码学应用随机数序列。
  • 使用choice()randbits()randbelow()等函数生成安全的随机数。
  • 生成用于密码重置、临时URL等的令牌。

如何用Python编写密码生成器[4个步骤]

先决条件: 您需要安装Python 3.6或更高版本才能跟随本教程一起编写。您也可以在Geekflare’s Online Python Code Editor上运行示例代码。

第1步:导入必要的模块

首先,让我们导入secrets模块。该模块已经内置于Python标准库中,因此您可以按如下方式导入它:

import secrets

让我们同时导入Python的内置string模块:

import string

第2步:定义字母表

下一步是定义字母表。这里,字母表表示我们将用于生成密码的所有字符集。我们希望它包含以下内容:小写字母、大写字母和特殊字符。

string模块提供了我们可以用来定义字母表的字符串常量。我们将使用以下字符串常量:

  • ascii_letters是小写字母和大写字母的连接字符串。
  • digits常量是包含数字0到9的字符串:'0123456789'
  • punctuation常量是所有特殊字符的字符串。
letters = string.ascii_letters
digits = string.digits
special_chars = string.punctuation

最后,让我们将上述字符串常量连接起来,得到字母表。

alphabet = letters + digits + special_chars

第3步:固定密码的长度;生成密码

让我们将密码的长度存储在变量pwd_length中。在本示例中,密码字符串的长度为12。

pwd_length = 12

▶️ 现在,运行以下代码单元格以生成密码:

pwd = ''
for i in range(pwd_length):
  pwd += ''.join(secrets.choice(alphabet))

print(pwd)
# 示例输出
}2:Lz,1!Gvo@

上述代码执行以下操作:

  • 密码字符串pwd最初为空字符串。
  • 我们知道secrets.choice(alphabet)会从字母表中随机选择一个字符。
  • 我们使用join()方法将该字符添加到pwd字符串中。因为我们不希望字符之间有任何空格,所以我们将分隔符指定为''
  • 为了重复上述步骤生成密码,我们使用一个循环,循环次数与密码的长度相同。

第4步:根据约束条件自定义密码

您可以通过检查是否满足某些约束条件来自定义密码生成。

例如,让我们检查长度为12的生成密码字符串是否满足以下约束条件:

  • 字符串pwd应至少包含一个特殊字符。
  • 它应包含至少两个数字。

在下面的代码片段中,您可以根据您定义的约束条件修改if语句检查的条件。

while True:
  pwd = ''
  for i in range(pwd_length):
    pwd += ''.join(secrets.choice(alphabet))

  if (any(char in special_chars for char in pwd) and 
      sum(char in digits for char in pwd)>=2):
          break
print(pwd)
# 示例输出
lX]{`y47pM4t

在上面的代码单元格中,我们使用一个infinite while loop,只要密码字符串pwd不符合约束条件,就会运行。当生成的密码pwd满足约束条件时,我们会跳出无限循环。

这是Python密码生成器的完整代码:

# 必要的导入
import secrets
import string

# 定义字母表
letters = string.ascii_letters
digits = string.digits
special_chars = string.punctuation

alphabet = letters + digits + special_chars

# 固定密码长度
pwd_length = 12

# 生成密码字符串
pwd = ''
for i in range(pwd_length):
  pwd += ''.join(secrets.choice(alphabet))

print(pwd)

# 生成满足约束条件的密码
while True:
  pwd = ''
  for i in range(pwd_length):
    pwd += ''.join(secrets.choice(alphabet))

  if (any(char in special_chars for char in pwd) and 
      sum(char in digits for char in pwd)>=2):
          break
print(pwd)

结论

恭喜您完成本教程!🎉现在您已经学会了如何在Python中编写密码生成器。

  • 为了生成加密安全的密码,您应该使用secrets模块而不是random模块。
  • 强密码应该足够长,并且应该是随机的,不能容易地预测或生成。它应该是大写字母、小写字母、数字和特殊字符的组合。
  • Python附带了一个内置的string模块,该模块提供了所有字母、数字和特殊字符的常量ascii_lettersdigitspunctuation。使用语法:string.constant来访问这些字符串常量。
  • 您可以使用上述常量来定义用于生成密码的字母表(所有字符的集合)。
  • 一旦您定义了一个字母表,您可以使用secrets.choice()从中随机选择一个字符。要在密码的长度上重复此操作,可以使用for循环。

▶️ 接下来,请阅读list of Python web servers来使用。

类似文章