如何使用Python `secret`模块生成随机整数?

问题描述 投票:0回答:5

在 Python 3.6 中,添加了 新模块

secrets

使用此模块生成

[n, m)
范围内的随机整数的最有效方法是什么?

我尝试过

choice(range(n, m))
,但我怀疑这是最好的方法。

python security random python-3.6
5个回答
21
投票

secrets.choice(range(n, m))
应该没问题,因为
range
在 Python 3 上很懒。

n + secrets.randbelow(m-n)
是另一种选择。我不会使用它,因为它不太正确。

由于

secrets
提供了对
SystemRandom
类的访问,与
random.Random
具有相同的接口,您还可以保留自己的
SystemRandom
实例:

my_secure_rng = secrets.SystemRandom()

然后做

my_secure_rng.randrange(n, m)

7
投票

secret
模块提供与
random
相同的接口;底层随机生成器刚刚更改为
SystemRandom
,加密强度很高。

简而言之,在需要更多安全性的情况下使用它

random
;我怀疑
choice
的性能受到如此严重的影响,值得您担心。


5
投票
import secrets
num = secrets.randbelow(50)
print(num)

3
投票

没有足够的代表来发表评论,但如果您运行快速执行时间测试,则可以添加到 user2357112 的答案中,他们实际上报告的结果基本相同。

Best of 3 trials with 1,000,000 loops per trial:
        randrange() 1.39906 seconds total time.
        choice() 1.39431 seconds total time.

0
投票

import secrets

def generate_random_integer(n, m):
    return n + secrets.randbelow(m - n)

© www.soinside.com 2019 - 2024. All rights reserved.