Fra*_*ler 7 python security random python-3.6
在Python 3.6中,添加了新模块secrets.
[n, m)使用此模块在范围内生成随机整数的最有效方法是什么?
我试过了choice(range(n, m)),但我怀疑这是最好的方法.
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)
该secret模块提供相同的接口random;底层随机生成器刚刚更改为SystemRandom加密强度较高的随机生成器。
简而言之,就像random在需要更多安全性的情况下一样使用它;我怀疑choice性能受到如此大的影响,值得您担心。
小智 5
import secrets
num = secrets.randbelow(50)
print(num)
Run Code Online (Sandbox Code Playgroud)