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')
即
uuid1 != uuid2 if url1 != url2
(唯一性概率很高),
url1 will always generate uuid1
(始终确定)
我打算 运行 通过 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
我认为你必须非常倒霉(比如天文倒霉)才会发生碰撞。而且它肯定是确定性的。
问题:这段代码会为不同的 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')
即
uuid1 != uuid2 if url1 != url2
(唯一性概率很高),url1 will always generate uuid1
(始终确定)
我打算 运行 通过 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
我认为你必须非常倒霉(比如天文倒霉)才会发生碰撞。而且它肯定是确定性的。