2024-04-29 01:55:47 发布
网友
这是我用来为我的应用程序生成密码重置链接的代码:
def create_unique_code(): return str(uuid.uuid4())
够结实吗?我用一两天的有效期。在
是的,UUID4是完全随机的,它的长度足以排除暴力强迫或侥幸猜测。所以只要RNG uuid.uuid4()提供足够好的随机性,你就可以了。在
uuid.uuid4()
但是,考虑使用例如加密签名的令牌(itsdangerouslib可以处理它)-不仅可以在生成时指定过期时间,还不必在服务器上存储有关令牌的任何内容。在
itsdangerous
在CPython,是的。可能在其他Python实现中,但是您可能需要再次检查是否使用了加密的强随机性源来生成UUID。在
在判断某种生成安全随机令牌的方法(如uuid)是否“足够强大”时,您可能会关心两个因素:
既然there are 2122 version 4 UUIDs(略高于5万亿万亿万亿),那么第一点的答案肯定是“是的”,在本例中。所有可能的uuid的空间不会很快就被野蛮强制执行。在
{3}表示当前使用的是强^安全性^或不使用。实际上,uuid4()的整个文档只是:
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返回:
os.urandom
a string of size random bytes suitable for cryptographic use.
是的,UUID4是完全随机的,它的长度足以排除暴力强迫或侥幸猜测。所以只要RNG
uuid.uuid4()
提供足够好的随机性,你就可以了。在但是,考虑使用例如加密签名的令牌(
itsdangerous
lib可以处理它)-不仅可以在生成时指定过期时间,还不必在服务器上存储有关令牌的任何内容。在在CPython,是的。可能在其他Python实现中,但是您可能需要再次检查是否使用了加密的强随机性源来生成UUID。在
在判断某种生成安全随机令牌的方法(如uuid)是否“足够强大”时,您可能会关心两个因素:
既然there are 2122 version 4 UUIDs(略高于5万亿万亿万亿),那么第一点的答案肯定是“是的”,在本例中。所有可能的uuid的空间不会很快就被野蛮强制执行。在
{3}表示当前使用的是强^安全性^或不使用。实际上,
uuid4()
的整个文档只是:显然没有安全保障。在
UUID specification也没有解决这个问题,它没有要求在UUID生成中使用加密的强随机性源,并且确实在安全考虑部分明确考虑了使用“可预测随机数源”来生成UUID的可能性。在
但是,我们可以看看https://github.com/python/cpython/blob/master/Lib/uuid.py的实现:
因为它使用
os.urandom
作为随机源,所以它是安全的。请参阅位于https://docs.python.org/3/library/os.html#os.urandom的文档,其中注意os.urandom
返回:相关问题 更多 >
编程相关推荐