创建加密安全随机数
默认情况下,Python 随机模块使用 Mersenne Twister PRNG
生成随机数,虽然适用于模拟等领域,但在更苛刻的环境中无法满足安全要求。
为了创建加密安全的伪随机数,可以使用 SystemRandom
,通过使用 os.urandom
,它能够充当密码安全的伪随机数发生器 CPRNG 。
使用它的最简单方法是简单地初始化 SystemRandom
类。提供的方法类似于随机模块导出的方法。
from random import SystemRandom
secure_rand_gen = SystemRandom()
为了在 [0, 20]
中创建 10 int
s 的随机序列,可以简单地调用 randrange()
:
print([secure_rand_gen.randrange(10) for i in range(10)])
# [9, 6, 9, 2, 2, 3, 8, 0, 9, 9]
要在给定范围内创建随机整数,可以使用 randint
:
print(secure_rand_gen.randint(0, 20))
# 5
因此,对于所有其他方法。接口完全相同,唯一的变化是底层数字生成器。
你也可以直接使用 os.urandom
来获取加密安全的随机字节。