我在Pycrypto中遇到了这个方法,用于生成随机字节:
from Crypto import Random
Random.get_random_bytes(5)
我想知道这种方法与如下的简单生成器有何不同:
import random
def get_random_bytes(N):
ASCII = "".join(chr(x) for x in range(255))
return "".join(random.choice(ASCII) for _ in range(n))
注意:我的直觉是Pycrypto方法更加密码“声音”。查看random
的文档,它表示它基于周期为2**19937-1
的生成器。查看Random.get_random_bytes
,它表明它能够生成加密强字节。这是什么意思?
当然,我希望使用库实现,而不是我自己的。我只是想了解它背后的加密概念。
答案 0 :(得分:5)
对于加密安全的随机数生成器,任何输出序列都不会提供有关下一个输出的信息。
random是基于Mersenne Twister。它的内部状态为624个32位数字。给定1248个值的输出,您可以在某个时刻知道整个状态。由此可以100%准确地确定未来的所有产出。