📅  最后修改于: 2020-04-16 13:38:48             🧑  作者: Mango
secrets模块用于生成管理重要数据的随机数,例如密码,帐户身份验证,安全令牌以及相关密码,这些密码具有较强的密码强度。该模块负责提供对最安全的随机性源的访问。该模块存在于Python 3.6及更高版本中。
随机数:类secrets.SystemRandom
此类使用os.urandom()函数从操作系统提供的源中生成随机数。
1,secrets.choice(sequence):此函数从非空序列中返回一个随机选择的元素,以管理基本的安全级别。
示例1:生成一个十个字符的字母数字密码。
import secrets
import string
alphabet = string.ascii_letters + string.digits
password = ''.join(secrets.choice(alphabet) for i in range(10))
print(password)
输出:
'tmX47l1uo4'
示例2:生成一个十个字符的字母数字密码,该密码至少包含一个小写字符,至少一个大写字符和至少三位数字。
import secrets
import string
alphabet = string.ascii_letters + string.digits
while True:
password = ''.join(secrets.choice(alphabet) for i in range(10))
if (any(c.islower() for c in password) and any(c.isupper()
for c in password) and sum(c.isdigit() for c in password) >= 3):
print(password)
break
输出:
Tx8LppU05Q
2,secrets.randbelow(n):此函数返回范围为[0,n)的随机整数。
import secrets
passwd = secrets.randbelow(20)
print(passwd)
输出:
2
3,secrets.randbits(k):此函数返回具有k个随机位的int。
import secrets
passwd = secrets.randbits(7)
print(passwd)
输出:
61
生成令牌
该模块提供了几种为应用程序生成安全令牌的函数,例如密码重置,难以猜测的URL等。
import secrets
token1 = secrets.token_bytes()
token2 = secrets.token_bytes(10)
print(token1)
print(token2)
输出:
b“ \ x86?\ x85 \ xcf \ x8ek8ud \ x8a \ x92 \ x8b> R \ xc7 \ x89_ \ xc4x \ xce'u] \ x95 \ x0c \ x05 *?HG8 \ xfb"
b'Dx \ xe8 \ x7f \ xc05 \ xdf \ xe0 \ xf6 \ xe1'
2,secrets.token_hex([nbytes = None]):此函数负责以十六进制生成一个随机文本字符串,其中包含nbytes个随机字节。如果未提供任何值,则使用合理的默认值。
import secrets
token1 = secrets.token_hex(16)
token2 = secrets.token_hex(9)
print(token1)
print(token2)
输出:
5d894a501c88fbe735c6ff496a6d3e51
78baed9057e597dce4
3,secrets.token_urlsafe([nbytes = None]):此函数负责生成包含nbytes个随机字节的随机URL安全文本字符串。这适用于密码恢复应用程序。
示例:生成难以猜测的包含安全令牌的临时URL。
import secrets
url = 'https://mydomain.com/reset=' + secrets.token_urlsafe()
print(url)
输出:
https://mydomain.com/reset=GbOiFIvhMoqWsfaTQKbj8ydbo8G1lsMx1ECa6SXjb1s
令牌应使用多少字节?
令牌的至少32个字节应用于防止暴力攻击。