我应该只使用 python 的 secrets.SystemRandom() class 的一个或多个实例吗?

Should I only be using one or multiple instances of python's secrets.SystemRandom() class?

我正在尝试安全地生成随机数并且我找到了秘密模块,显然生成随机数的唯一方法是拥有 secrets.SystemRandom class 的实例,但现在我是困惑,我应该使用它的一个或多个实例在不同且完全不相关的地方生成 17 个随机数吗?

编辑 1:secrets.SystemRandom() https://docs.python.org/3/library/random.html#random.SystemRandom

的文档

编辑 2:文档来自此处 https://docs.python.org/3/library/secrets.html

编辑3:使用https://grep.app/ and finding https://github.com/pyradius/pyrad/blob/master/pyrad/packet.py后我想我只需要使用class的一个实例,我会使用它,如果这是错误的,请发表评论或回答。

should I be using one or multiple instances of it for generating 17 random numbers in different and completely unrelated places?

您只需要 random.SystemRandom 的一个实例。创建实例并重用它。

>>> from random import SystemRandom
>>> rgenerator = SystemRandom()
>>> rint = rgenerator.randint
>>> rint(0, 10)
6

now I am confused, should I be using one or multiple instances of it for generating 17 random numbers in different and completely unrelated places?

没关系,因为如文档中所述 SystemRandom 没有自己的内部状态,它只是调用 OS 的随机数据源(通过 os.urandom ).所以使用 15 个不同的实例或一个具有相同的结果(尽管前者浪费了更多的内存)。

所以你可以做任何你觉得更清楚的事情,它没有真正的技术或正确性轴承(顺便说一句,secrets 确实有一个内部 SystemRandom 实例,但它没有公开,这很令人沮丧) .