创建加密安全随机数

默认情况下,Python 随机模块使用 Mersenne Twister PRNG 生成随机数,虽然适用于模拟等领域,但在更苛刻的环境中无法满足安全要求。

为了创建加密安全的伪随机数,可以使用 SystemRandom ,通过使用 os.urandom,它能够充当密码安全的伪随机数发生器 CPRNG

使用它的最简单方法是简单地初始化 SystemRandom 类。提供的方法类似于随机模块导出的方法。

from random import SystemRandom
secure_rand_gen = SystemRandom()

为了在 [0, 20] 中创建 10 ints 的随机序列,可以简单地调用 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 来获取加密安全的随机字节。