随机模块提供的随机生成器是伪随机数生成器,它不具有加密安全性,因此在Python 3.6及更高版本中添加了secrets模块。
加密安全随机生成器使用同步方法生成随机数据,以确保没有两个进程可以同时获得相同的数据。
在Python 3.6之前,我们用os.urandom()和random.SystemRandom类加密地使随机数发生器安全。
注意
:secrets模块仅在Python3.6以及更高的版本中可以获得。如果你正在使用Python的旧版本,而却想要使随机生成器安全,请参考:https://pynative.com/cryptographically-secure-random-data-in-python
secrets模块是CSPRNG,即加密性强伪随机数发生器(cryptographically strong Pseudo-Random Number Generator)。它被用来生成随机数,在对安全敏感的应用程序中是安全和有用的。
请参阅PEP-0506。此PEP旨在将secrets模块添加到Python标准库中。
3.随机token
4.密码恢复安全URL和会话密钥
注意:secrets模块基于os.urandom()和random.SystemRandom(), 它们是操作系统最好的加密随机性源码的接口。
在Windows上,os.urandom()在内部使用CryptGenRandom(),Linux 3.17及更新版本,getrandom()系统调用现在可以使用,在OpenBSD 5.6及更高版本中,现在使用C getentropy()函数。
下面让我们来看如何使用secrets模块。
.使用操作系统提供的最高质量源来生成随机数的类
.使用secrets.SystemRandom类我们能使用所有的random模块的功能
.在secrets模块之前,我们使用random.SystemRandom去加密地使随机数据安全。使用secrets模块也可以使用同样的类。仅需执行secrets.SystemRandom()
让我们看一下如何使用secrets.SystemRandom类来保护随机生成器的示例:
import secrets
print("Random integer number generated using secrets module is ")
number = secrets.randbelow(10)
print(number)
number = secrets.randbelow(10)
print(number)
number = secrets.randbelow(10)
print(number)
#Getting systemRandom class instance out of secrets module
secretsGenerator = secrets.SystemRandom()
#random integer number uisng secrets
randomNumber = secrets