os.urandom或 ssl.RAND_bytes : 在为加密目的生成随机字节时,更推荐哪个?
如果两者都不是更好,那么权衡是什么?在差异方面对两者的期望是什么?
请注意,ssl.RAND_bytes 仅存在于 Python 3 中。
最佳答案
ssl.RAND_bytes
需要先播种才能使用。因此,您不能仅依赖 ssl.RAND_bytes
。 os.urandom
和 `ssl.RAND_bytes
都是伪随机数生成器。 PRNG 是确定性的;当使用相同的数据作为种子时,它们将返回相同的伪随机数字节流。如果观察者不知道种子值,这些字节应该与真正的随机字节无法区分。然而,os.urandom
通常使用操作系统内的熵源(重新)播种。
因此,应优先使用 os.urandom
而不是 ssl.RAND_bytes
。首先,它已经被播种(并且将被操作系统重新播种)。此外,它不需要额外依赖 SSL 库。缺点可能是性能。使用 ssl.RAND_bytes
从 os.urandom
中获取足够大的值可能会更快,因为 os.urandom
需要随时调用系统你检索数据。
关于python - os.urandom 还是 ssl.RAND_bytes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18113906/