1 关于secrets
secrets 模块用于生成高度加密的随机数,安全性比较高,应用方面有生成安全的随机数、生成密码字符串等
python官方也推荐最好用 secrets 替代 random 模块,random 模块生成的是一种伪随机数,基于系统时钟和其它可预测原理生成,不是真正随机和安全的
2 相关函数和类
class secrets.SystemRandom()
一个class 更安全地生成随机数据的class 。通过这个class,我们可以使用random模块下的所有函数。也就是说,通过这个class random下的而函数也可以像secrets下的函数一样生成安全的随机数
等同于random.SystemRandom()
执行
secrets.choice(sequence)
Return a randomly chosen element from a non-empty sequence.
secrets.randbelow(n)
返回 [0, n) 范围内的随机整数。
secrets.randbits(k)
返回一个整数, 该整数具有k随机比特
# 大小写字母+数子0-9
letters_and_num = string.ascii_letters + string.digits
# letters_and_num中随机挑选8个数据,组成字符串
pwd = ''.join(secrets.choice(letters_and_num) for i in range(8))
结果
'EhvueUUr'
secrets.token_bytes([nbytes=None])
返回含 nbytes 个字节的随机字节字符串,如果未提供 nbytes,或nbytes为 None,则默认为32字节
secrets.token_hex([nbytes=None])
返回十六进制随机文本字符串。字符串有 nbytes 个随机字节,如果未提供 nbytes,或nbytes为 None,则默认为32字节
secrets.token_urlsafe([nbytes=None])
返回安全的 URL 随机文本字符串,包含 nbytes 个随机字节。文本用 Base64 编码,平均来说,每个字节对应 1.3 个结果字符