0

如果有人知道从 CFUUIDCreate... 返回的 ID 是否均匀分布在其所有位上,我很感兴趣。更具体地说:如果您从中截断一些位,它仍然会均匀分布吗?

例如,我要求它知道它是否可以用作散列函数,以及如果我去掉它的一些位,它将有多少冲突。

4

1 回答 1

2

它高度依赖于生成的 UUID 的版本,从文档看来 Apple 使用的是版本 1 (您可以在opensource.apple.com查看实际实现,它应该在 Core Foundation 框架中)。版本 1(和 2)没有均匀分布的位,因此当您开始切割它的位时,您将失去唯一性。您可以做的是使用 SHA256 或类似具有均匀分布位的东西对 UUID 进行散列。

编辑:我刚刚从最新的 Core Foundation 版本(撰写本文时为 744.18)检查了CFUUID.cCFUUIDRef CFUUIDCreate(CFAllocatorRef alloc) ,并且似乎uuid_generate_random在所有情况下都在使用(有一个分支检查名为的布尔值useV1UUIDs,它始终为假)。根据手册页,uuid_generate_random将使用/dev/urandom/创建 UUID,这将使生成的 UUID 均匀分布的位。不确定我是否会指望它总是随机的,但未来的实现可能会发生变化。

于 2013-04-23T16:07:26.550 回答