如何在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_letters、digits和punctuation。使用语法:string.constant来访问这些字符串常量。
- 您可以使用上述常量来定义用于生成密码的字母表(所有字符的集合)。
- 一旦您定义了一个字母表,您可以使用secrets.choice()从中随机选择一个字符。要在密码的长度上重复此操作,可以使用for循环。
▶️ 接下来,请阅读list of Python web servers来使用。