os.urandom或ssl.RAND_bytes:为加密目的生成随机字节时,更推荐哪个?
如果两者都不是更好,那么在差异方面有什么权衡和每种方法的预期?
请注意,ssl.RAND_bytes仅存在于Python 3中。
答案 0 :(得分:2)
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
在您检索数据时需要系统调用。