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

Fra*_*ler 7 python security random python-3.6

在Python 3.6中,添加了新模块secrets.

[n, m)使用此模块在范围内生成随机整数的最有效方法是什么?

我试过了choice(range(n, m)),但我怀疑这是最好的方法.

use*_*ica 8

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

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

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

my_secure_rng = secrets.SystemRandom()
Run Code Online (Sandbox Code Playgroud)

并做

my_secure_rng.randrange(n, m)
Run Code Online (Sandbox Code Playgroud)


Jim*_*ard 7

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

简而言之,就像random在需要更多安全性的情况下一样使用它;我怀疑choice性能受到如此大的影响,值得您担心。


小智 5

import secrets
num = secrets.randbelow(50)
print(num)
Run Code Online (Sandbox Code Playgroud)

  • 请给予更多解释。 (3认同)