您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

您何时真正被迫使用UUID作为设计的一部分?

您何时真正被迫使用UUID作为设计的一部分?

我为Ruby编写了UUID生成器/解析器,因此我认为自己对该主题有足够的了解。有四个主要的UUID版本:

从加密安全的随机生成器中抽取的第4版UUID本质上只是16个字节的随机性,并且通过一些位纠缠来标识UUID版本和变体。这些冲突极不可能发生,但是如果使用PRNG或您碰巧碰到真,真的,真的,真的,真的很倒霉,有可能发生这种情况。

版本5和版本3 UUID分别使用SHA1和MD5哈希函数,以将名称空间与一段已经唯一的数据结合起来以生成UUID。例如,这将允许您从URL生成UUID。仅当基础哈希函数也有冲突时,才可能发生冲突。

版本1 UUID是最常见的。他们使用网卡的MAC地址(除非经过欺骗,否则应该是唯一的),时间戳记以及通常的比特级更改来生成UUID。如果机器没有MAC地址,则使用加密安全的随机生成生成6个节点字节。如果以足够快的顺序生成两个UUID,以使时间戳与先前的UUID相匹配,则时间戳将递增1。除非发生以下情况之一,否则不应发生冲突:MAC地址被欺骗;一台运行两个不同的UUID生成应用程序的机器在完全相同的时刻生成UUID。两台没有网卡或没有用户级访问MAC地址的机器都具有相同的随机节点序列,并在同一时刻生成UUID。

实际上,所有这些事件都不会在单个应用程序的ID空间中偶然发生。除非您接受整个Internet范围内的ID,或者在不受信任的环境中接受恶意的ID冲突,否则恶意个人可能会在ID冲突的情况下做一些不好的事情,除非您不必担心。至关重要的是要了解,在大多数情况下,如果碰巧生成与我相同的版本4 UUID,则没关系。我在与您完全不同的ID空间中生成了ID。我的应用程序永远不会知道碰撞,因此碰撞无关紧要。坦白说,在没有恶意行为者的单个应用程序空间中,即使在版本4 UUID上,即使在

另外,2 ^ 64 * 16是256艾字节。像这样,在单个应用程序空间中有50%的ID冲突机会之前,您需要存储256艾字节的ID。

其他 2022/1/1 18:32:22 有428人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶