os.urandom或ssl.RAND_bytes?

时间:2013-08-07 21:11:49

标签: python

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

如果两者都不是更好,那么在差异方面有什么权衡和每种方法的预期?

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

1 个答案:

答案 0 :(得分:2)

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

因此,os.urandom优先使用ssl.RAND_bytes。首先,它已经播种(并将由操作系统重新播种)。此外,它不需要对SSL库的额外依赖性。缺点可能是性能。使用来自ssl.RAND_bytes的足够大值的os.urandom种子可能会更快,因为os.urandom在您检索数据时需要系统调用。