如果有人知道CFUUIDCreate的返回ID是否均匀分布在其所有位上,我感兴趣。更具体一点:如果从中截断一些位,它是否仍然是均匀分布的?
我要求它知道它是否可以用作散列函数,以及如果我删除它的一些部分它会有多少碰撞。
答案 0 :(得分:2)
它高度依赖于生成的UUID的版本,从Apple看起来像使用version 1的文档(你可以检查opensource.apple.com的实际实现,它应该在Core Foundation框架中)。版本1(和2)没有均匀分布的位,因此当您开始切割其位时,您将失去唯一性。你可以做的是使用SHA256或具有均匀分布位的那些来散列UUID。
编辑:我刚刚从最新的Core Foundation版本(撰写本文时为744.18)检查了CFUUID.c,CFUUIDRef CFUUIDCreate(CFAllocatorRef alloc)
似乎在所有情况下都使用uuid_generate_random
(有分支)检查名为useV1UUIDs
的布尔值,该布尔值始终为false。根据手册页,uuid_generate_random
将使用/dev/urandom/
来创建UUID,这将为生成的UUID提供均匀分布的位。不确定我是否会指望它总是随机的,实施可能在将来发生变化。