【发布时间】:2012-08-19 17:29:48
【问题描述】:
我想生成随机字符串的令牌和密钥。生成它们的可接受方法是什么?
是否可以通过标准库函数生成两个 UUID 并将它们连接起来?
【问题讨论】:
-
您使用的是哪个操作系统?还是您需要独立于操作系统的解决方案?
标签: python oauth cryptography
我想生成随机字符串的令牌和密钥。生成它们的可接受方法是什么?
是否可以通过标准库函数生成两个 UUID 并将它们连接起来?
【问题讨论】:
标签: python oauth cryptography
os.urandom 提供对操作系统随机数生成器的访问权限
编辑:如果您使用的是 linux 并且非常关心安全性,您应该直接使用 /dev/random/。此调用将阻塞,直到有足够的entropy 可用。
【讨论】:
计算机(没有特殊硬件)只能生成pseudo random data。一段时间后,所有伪随机数生成器将开始重复自己。它在重复之前可以生成的数据量称为周期。
一个非常流行的伪随机数(也用于 Python 中的random 模块)生成器是Mersenne Twister。但它被认为不适合加密目的,因为在仅观察相对少量的迭代后就很容易预测下一次迭代。
请参阅cryptographically secure pseudo-random number generators 上的 Wikipedia 页面以获取似乎合适的算法列表。
FreeBSD、OpenBSD 和 OS X 等操作系统在其urandom 设备上使用Yarrow 算法。所以在那些使用os.urandom 的系统上可能没问题,因为它被认为是加密安全的。
当然你需要使用什么很大程度上取决于你的要求有多高;您希望它有多安全?一般来说,我建议您使用已发布和测试的算法实现。编写自己的实现很容易出错。
编辑:计算机可以通过观看例如收集随机数据。中断到达的时间。然而,这并不能提供大量的随机数据,因此它经常被用来作为 PRNG 的种子。
【讨论】: