uuid.NAMESPACE_URL 会为不同的 URL 生成唯一的确定性 UUID 吗?

Will uuid.NAMESPACE_URL generate unique deterministic UUIDs for different URLs?

问题:这段代码会为不同的 URL 生成 unique(很有可能)和 deterministic(总是)UUID 吗?

import uuid
uuid1 = uuid.uuid5(uuid.NAMESPACE_URL, 'https://whosebug.com/questions/ask1')
uuid2 = uuid.uuid5(uuid.NAMESPACE_URL, 'https://whosebug.com/questions/ask2')

我打算 运行 通过 SHA 哈希函数建议您的命名空间和字符串,然后将低 128 位用于 UUID。

事实证明,这与他们在 Python 中为 UUID5 所做的非常相似:

def uuid5(namespace, name):
     """Generate a UUID from the SHA-1 hash of a namespace UUID and a name."""
     from hashlib import sha1
     hash = sha1(namespace.bytes + bytes(name, "utf-8")).digest()
     return UUID(bytes=hash[:16], version=5)

https://github.com/python/cpython/blob/3db42fc5aca320b0cac1895bc3cb731235ede794/Lib/uuid.py#L718

我认为你必须非常倒霉(比如天文倒霉)才会发生碰撞。而且它肯定是确定性的。