这是我用来为我的应用生成密码重置链接的代码:
def create_unique_code():
return str(uuid.uuid4())
够强吗?我使用一到两天的到期时间。
请您参考如下方法:
在 CPython 中,是的。可能在其他 Python 实现中,但您可能需要仔细检查是否使用了加密的强随机源来生成 UUID。
在判断某种生成安全随机 token 的方法(例如 UUID)是否“足够强大”时,您可能会关心两个因素:
- 是否有足够的可能值使其不被暴力破解?
- 是否使用了随机源cryptographically secure ?
自 there are 2122 version 4 UUIDs (略高于 5 万亿万亿),在这种情况下,第 1 点的答案肯定是"is"。所有可能的 UUID 的空间不会很快被暴力破解。
official Python docs on uuid.uuid4() 当前未回答第 2 点,其中没有提及安全性或使用的随机源是否强大。事实上,uuid4() 的整个文档就是:
Generate a random UUID.
这显然不提供安全保证。
UUID specification 也没有解决它,它不强制在 UUID 生成中使用加密强大的随机源,并且确实明确考虑了 “可预测的随机数源” 用于生成 UUID 的可能性安全注意事项 部分。
但是,我们可以在 https://github.com/python/cpython/blob/master/Lib/uuid.py 查看实现:
def uuid4():
"""Generate a random UUID."""
return UUID(bytes=os.urandom(16), version=4)
因为它使用 os.urandom 作为它的随机源,所以它是安全的。请参阅 https://docs.python.org/3/library/os.html#os.urandom 处的文档注意 os.urandom 返回:
a string of size random bytes suitable for cryptographic use.
