如何使用 Python `secret` 模块生成随机整数?
How to use Python `secret` module to generate random integer?
在 Python 3.6 中,添加了 new module, secrets
。
使用此模块生成 [n, m)
范围内的随机整数的最有效方法是什么?
我试过choice(range(n, m))
,但我怀疑这是最好的方法。
secrets.choice(range(n, m))
应该没问题,因为 range
在 Python 上很懒惰 3.
n + secrets.randbelow(m-n)
是另一种选择。我不会使用它,因为它不太正确。
由于 secrets
提供对 SystemRandom
class 的访问,与 random.Random
具有相同的接口,您还可以保留自己的 SystemRandom
实例:
my_secure_rng = secrets.SystemRandom()
并做
my_secure_rng.randrange(n, m)
secret
模块提供与random
相同的接口;底层随机生成器刚刚更改为 SystemRandom
,它具有很强的加密能力。
简而言之,在需要更多安全性的情况下,请像 random
一样使用它;我怀疑 choice
的表现是否值得您担心。
import secrets
num = secrets.randbelow(50)
print(num)
如果您运行快速执行时间测试他们实际上报告基本相同,则没有足够的代表发表评论但添加到 user2357112 的回答。
Best of 3 trials with 1,000,000 loops per trial:
randrange() 1.39906 seconds total time.
choice() 1.39431 seconds total time.
在 Python 3.6 中,添加了 new module, secrets
。
使用此模块生成 [n, m)
范围内的随机整数的最有效方法是什么?
我试过choice(range(n, m))
,但我怀疑这是最好的方法。
secrets.choice(range(n, m))
应该没问题,因为 range
在 Python 上很懒惰 3.
n + secrets.randbelow(m-n)
是另一种选择。我不会使用它,因为它不太正确。
由于 secrets
提供对 SystemRandom
class 的访问,与 random.Random
具有相同的接口,您还可以保留自己的 SystemRandom
实例:
my_secure_rng = secrets.SystemRandom()
并做
my_secure_rng.randrange(n, m)
secret
模块提供与random
相同的接口;底层随机生成器刚刚更改为 SystemRandom
,它具有很强的加密能力。
简而言之,在需要更多安全性的情况下,请像 random
一样使用它;我怀疑 choice
的表现是否值得您担心。
import secrets
num = secrets.randbelow(50)
print(num)
如果您运行快速执行时间测试他们实际上报告基本相同,则没有足够的代表发表评论但添加到 user2357112 的回答。
Best of 3 trials with 1,000,000 loops per trial:
randrange() 1.39906 seconds total time.
choice() 1.39431 seconds total time.