python - os.urandom 还是 ssl.RAND_bytes?

标签 python

os.urandomssl.RAND_bytes : 在为加密目的生成随机字节时,更推荐哪个?

如果两者都不是更好,那么权衡是什么?在差异方面对两者的期望是什么?

请注意,ssl.RAND_bytes 仅存在于 Python 3 中。

最佳答案

ssl.RAND_bytes 需要先播种才能使用。因此,您不能仅依赖 ssl.RAND_bytesos.urandom`ssl.RAND_bytes 都是随机数生成器。 PRNG 是确定性的;当使用相同的数据作为种子时,它们将返回相同的伪随机数字节流。如果观察者不知道种子值,这些字节应该与真正的随机字节无法区分。然而,os.urandom 通常使用操作系统内的熵源(重新)播种。

因此,应优先使用 os.urandom 而不是 ssl.RAND_bytes。首先,它已经被播种(并且将被操作系统重新播种)。此外,它不需要额外依赖 SSL 库。缺点可能是性能。使用 ssl.RAND_bytesos.urandom 中获取足够大的值可能会更快,因为 os.urandom 需要随时调用系统你检索数据。

关于python - os.urandom 还是 ssl.RAND_bytes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18113906/

相关文章:

python - 使用按钮时 tuplex 超出范围

python - mujoco_py.MjModel(<filepath>) 在哪里定义?

python - 子集化后如何添加列?

python - 如何使用 raw_input 在 python 2.7 中接收来自 stdin 的输入?

python - 实现 PyObjc NsObject 子类

家谱的 Python simplepyged 图形表示

python - 将 collections.deque 转换为 python 列表的算法复杂度是多少?

python - 我可以使用 lambda、map、apply 或 applymap 来填充数据框吗?

python - 使用 FFmpeg 和 IPython

python - 如何在 Python 3.6 中验证 AWS Cognito 生成的 JWT 的签名?