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)