CFUUIDCreate是否均匀分布在所有位上?

时间:2013-04-23 15:56:57

标签: objective-c core-foundation

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

我要求它知道它是否可以用作散列函数,以及如果我删除它的一些部分它会有多少碰撞。

1 个答案:

答案 0 :(得分:2)

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

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