在哪里可以找到 os.urandom() 的源代码?

Ric*_*ann 2 python random python-3.x python-internals

我想调查研究python 3.7的os.urandom()函数代码。我查看了各自的标准库的os.py,但它既没有在那里定义,也没有在那里导入。我也尝试 grep 定义:

/usr/lib/python3.7 $ grep -rFl "def urandom" 2> /dev/null 但没什么。我怀疑 os.urandom() 发生了一些神奇的事情。在哪里可以找到用于学习和密码分析的函数定义?

Mar*_*ers 5

在 POSIX 系统和 Windows 上,为os模块定义的许多名称都由 处理Modules/posixmodule.c。请注意,源代码是C 语言,而不是 Python,因为访问系统函数需要本机代码。

您可以看到这是os.py源代码,它要么导入posix要么nt基于当前操作系统,其中这两个名称都是从上述posixmodule.c文件编译的,但重命名以更好地反映平台并表明两个变体之间的功能不同(nt变体提供的功能较少)。

的实现细节见os_urandom_impl()函数os.urandom()。这委托给一个内部函数 ,_PyOS_URandom()它与 Python 启动过程早期需要的其他辅助函数一起在Python/bootstrap_hash.c.

  • @RichardNeumann:`dev_urandom()` 是最后调用的函数。如果您使用的操作系统支持 [`getrandom()` 系统调用](http://man7.org/linux/man-pages/man2/getrandom.2.html) 那么这是首选(Linux,Solaris),接下来 [`getentropy()`](http://man7.org/linux/man-pages/man3/getentropy.3.html) 将被使用(OpenBSD),并且只有当这些调用不可用时,Python 才会从`/dev/urandom`。 (2认同)