Guid UUID有多独特?
使用UUID唯一地标识某些东西(我将其用于上传到服务器的文件)有多安全?据我所知,它是基于随机数。然而,在我看来,如果有足够的时间,它最终会自己重复,纯粹是出于偶然。是否有更好的系统或某种类型的模式来缓解此问题?非常安全: 一个人每年被陨石击中的风险是 估计是170亿分之一的机会,这意味着 概率约为0.00000000006(6×10−11) ,相当于赔率 在一年内创建几十万亿个UUID并拥有一个 复制换句话说,只有在每年生成10亿个UUID之后 其次,在接下来的100年里,只创造一个 复制率大约为50% 警告: 然而,这些概率仅在生成UUID时成立 使用足够的熵。否则,重复的概率 可能更高,因为统计离散度可能 再低一点。其中分布式数据库需要唯一标识符 应用程序,这样即使来自多个应用程序的数据 设备被合并,种子和生成器的随机性被用于 每个设备在使用寿命内都必须可靠。哪里 这是不可行的,RFC4122建议使用名称空间变量 相反 来源:维基百科关于通用唯一标识符的文章(链接导致从2016年12月开始修订,然后编辑该部分) 另请参阅同一通用唯一标识符文章中关于同一主题的当前部分,。引用自: 因此,任何人都可以创建UUID并使用 它是用来识别某物的 有理由相信 标识符永远不会被删除 被任何人无意中用于 还有别的吗Guid UUID有多独特?,guid,uniqueidentifier,uuid,Guid,Uniqueidentifier,Uuid,使用UUID唯一地标识某些东西(我将其用于上传到服务器的文件)有多安全?据我所知,它是基于随机数。然而,在我看来,如果有足够的时间,它最终会自己重复,纯粹是出于偶然。是否有更好的系统或某种类型的模式来缓解此问题?非常安全: 一个人每年被陨石击中的风险是 估计是170亿分之一的机会,这意味着 概率约为0.00000000006(6×10−11) ,相当于赔率 在一年内创建几十万亿个UUID并拥有一个 复制换句话说,只有在每年生成10亿个UUID之后 其次,在接下来的100年里,只创造一个 复制率大
它接着非常详细地解释了它实际上有多安全。所以要回答你的问题:是的,它足够安全。如果“给足够的时间”是指100年,并且你以每秒十亿的速度创建它们,那么是的,100年后发生碰撞的几率是50%。UUID方案通常不仅使用伪随机元素,而且使用当前的系统时间,以及某种通常唯一的硬件ID(如果可用),例如网络MAC地址
使用UUID的全部意义在于,您相信它能够比您自己更好地提供唯一的ID。这与使用第三方加密库而不是使用自己的加密库的原理相同。自己做可能会更有趣,但这样做通常不太负责任。已经做了很多年了。永远不要遇到问题 我通常将数据库设置为一个包含所有键和修改日期等的表。从未遇到过重复密钥的问题
它唯一的缺点是,当您编写一些查询以快速查找某些信息时,您需要大量复制和粘贴密钥。您不再有简单易记的ID。我不知道这对您是否重要,但请记住。UUID有多种类型,因此“安全程度”取决于您使用的类型(UUID规范称之为“版本”)
- 版本1是基于时间的加MAC地址UUID。128位包含网卡MAC地址的48位(由制造商唯一分配)和分辨率为100纳秒的60位时钟。这样这些uuid至少在那之前是安全的(除非你每秒需要超过1000万个新uuid或者有人克隆你的网卡)。我说“至少”是因为时钟开始于1582年10月15日,所以在时钟结束后的400年里,即使是很小的复制可能性都没有
- 版本4是随机数UUID。有六个固定比特,UUID的其余部分是122个随机比特。请参阅或其他分析,说明复制的可能性有多大
- 版本3使用MD5,版本5使用SHA-1创建这122位,而不是随机或伪随机数生成器。因此,就安全性而言,它就像第4版是一个统计问题(只要您确保摘要算法处理的内容始终是唯一的)
- 版本2与版本1相似,但时钟更小,所以它将更快地完成工作。但是,由于版本2 UUID是用于DCE的,所以不应该使用这些UUID
那么为什么不是每个人都简单地使用版本1 UUID呢?这是因为版本1 UUID显示生成它的机器的MAC地址,并且它们是可预测的——这两件事可能会对使用这些UUID的应用程序产生安全影响。这一问题的答案可能在很大程度上取决于UUID版本 许多UUID生成器使用版本4随机数。然而,其中许多使用伪随机数生成器来生成它们 如果使用一个小周期的不良种子PRNG来生成UUID,我会说它根本不太安全。一些随机数生成器的方差也很小。i、 e.比其他人更倾向于某些数字。这行不通 因此,它的安全性取决于用于生成它的算法 另一方面,如果您知道这些问题的答案,那么我认为使用版本4 uuid应该是非常安全的。事实上,我用它来识别网络块文件上的块