python内置库--secrets

发布时间 2023-05-28 17:11:13作者: 工作手记

1 关于secrets

secrets 模块用于生成高度加密的随机数,安全性比较高,应用方面有生成安全的随机数、生成密码字符串等
python官方也推荐最好用 secrets 替代 random 模块,random 模块生成的是一种伪随机数,基于系统时钟和其它可预测原理生成,不是真正随机和安全的

2 相关函数和类

class secrets.SystemRandom()

一个class 更安全地生成随机数据的class 。通过这个class,我们可以使用random模块下的所有函数。也就是说,通过这个class random下的而函数也可以像secrets下的函数一样生成安全的随机数
等同于random.SystemRandom()

image
执行
image

secrets.choice(sequence)

Return a randomly chosen element from a non-empty sequence.
image

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'

image

secrets.token_bytes([nbytes=None])
返回含 nbytes 个字节的随机字节字符串,如果未提供 nbytes,或nbytes为 None,则默认为32字节
image

secrets.token_hex([nbytes=None])
返回十六进制随机文本字符串。字符串有 nbytes 个随机字节,如果未提供 nbytes,或nbytes为 None,则默认为32字节

image

secrets.token_urlsafe([nbytes=None])
返回安全的 URL 随机文本字符串,包含 nbytes 个随机字节。文本用 Base64 编码,平均来说,每个字节对应 1.3 个结果字符
image