Pycrypto的Random.get_random_bytes和简单随机字节生成器有什么区别?

5 投票
1 回答
5540 浏览
提问于 2025-04-17 22:15

我在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则说明它可以生成加密强度的字节。这是什么意思呢?

当然,我希望使用库里提供的实现,而不是自己写。我只是想理解背后的加密概念。

1 个回答

5

对于一个加密安全的随机数生成器来说,任何输出的序列都不会让你知道下一个输出会是什么。

而random这个生成器是基于梅森旋转算法的。它内部有624个32位的数字作为状态。如果你得到了1248个输出值,你就能知道它在某个时刻的全部状态。这样的话,你就可以100%准确地预测出所有未来的输出。

撰写回答