2

我想生成随机字符串的令牌和密钥。生成它们的可接受方法是什么?

通过标准库函数生成两个 UUID 并将它们连接起来是否可以接受?

4

2 回答 2

4

os.urandom提供对操作系统随机数生成器的访问

编辑:如果您使用的是 linux 并且非常关心安全性,您应该直接使用/dev/random/。此调用将阻塞,直到有足够的可用。

于 2012-08-24T07:34:00.080 回答
0

计算机(没有特殊硬件)只能生成随机数据。一段时间后,所有伪随机数生成器将开始重复自己。它在重复之前可以生成的数据量称为周期

Mersenne Twister是一个非常流行的伪随机数(也在 Pythonrandom模块中使用)生成器。但它被认为不适合加密目的,因为在仅观察相对少量的迭代后预测下一次迭代相当容易。

请参阅有关加密安全伪随机数生成器的 Wikipedia 页面,以获取似乎合适的算法列表。

FreeBSD、OpenBSD 和 OS X 等操作系统在其设备上使用Yarrow算法。urandom所以在那些系统上使用os.urandom可能没问题,因为它被认为是加密安全的。

当然你需要使用什么很大程度上取决于你的要求有多高;您希望它有多安全?一般来说,我建议您使用已发布和测试的算法实现。编写自己的实现很容易出错。

编辑:计算机可以通过观察例如中断到达的时间来收集随机数据。然而,这并不能提供大量的随机数据,因此它经常被用来作为 PRNG 的种子。

于 2012-08-24T09:43:41.113 回答