Python PyCrypto模块中的Random从何处获取其随机字节?

Python PyCrypto模块中的Random从何处获取其随机字节?,python,encryption,random,cryptography,pycrypto,Python,Encryption,Random,Cryptography,Pycrypto,在使用C++进行WinAPI编程期间,我注意到我们可以调用函数CryptGenRandom在Windows CryptoAPI的上下文中生成随机字节。如果我们深入到系统详细信息,这些字节实际上是从Windows上的advapi32.dll生成的 在Python中,我知道有两种方法可以生成可用于加密的随机字节: 从加密随机导入获取随机字节 从机密导入令牌\u字节 我想知道这些模块是否仍在Windows上调用advapi32.dll,以生成所需的随机字节。或者,它们是否有一种生成完全独立于Win

在使用
C++
进行WinAPI编程期间,我注意到我们可以调用函数
CryptGenRandom
在Windows CryptoAPI的上下文中生成随机字节。如果我们深入到系统详细信息,这些字节实际上是从Windows上的
advapi32.dll
生成的

在Python中,我知道有两种方法可以生成可用于加密的随机字节:

  • 从加密随机导入获取随机字节
  • 从机密导入令牌\u字节

我想知道这些模块是否仍在Windows上调用
advapi32.dll
,以生成所需的随机字节。或者,它们是否有一种生成完全独立于Windows动态库(或
DLL
)的随机字节的方法?

深入到代码中(您希望在那里获得文档),您会发现两者似乎都依赖于
os.uradom
,而后者又依赖于:

在Windows上,它将使用
CryptGenRandom()

现在,他们通常会使用Microsoft CSP,使用什么取决于系统


一般来说,您希望依赖操作系统的熵,因为要为特定的运行时获得足够的熵是很困难的。如今,这些RNG是相当值得信赖的资源,而且速度也相对较快,因此,将CSPRNG实现在高级语言库中通常没有多大意义,更不用说熵源了。

是的,.NET的内容通常依赖于旧时代的原生加密内容,没有什么新的内容。