我从文档中了解了两者之间的差异
https://docs.python.org/2/library/uuid.html
https://docs.python.org/3/library/uuid.html
uuid1()
:
从主机ID,序列号和当前时间生成UUID
uuid4()
:
生成随机UUID。
因此uuid1
使用机器/序列/时间信息来生成UUID。使用每个的利弊是什么?
我知道uuid1()
可以有隐私问题,因为它基于机器信息。我想知道在选择其中一个时是否更加微妙。我uuid4()
现在就使用它,因为它是一个完全随机的UUID。但我想知道我是否应该用它uuid1
来减少碰撞的风险。
解决方案
uuid1()
保证不会产生任何碰撞(假设您不会同时创建太多碰撞)。如果重要的是它uuid
和计算机之间没有连接,我就不会使用它,因为mac地址被用来使它在计算机上独一无二。
您可以通过在不到100ns 的时间内创建超过2 14 uuid1 来创建重复项,但对于大多数用例来说这不是问题。
uuid4()
正如你所说,生成一个随机的UUID。碰撞的可能性确实非常小。足够小,你不应该担心它。问题是,一个坏的随机数生成器使它更容易发生冲突。
Bob Aman的这个出色的答案总结得很好。(我建议阅读整个答案。)
坦率地说,在没有恶意攻击者的单个应用程序空间中,即使在版本4 UUID上,即使你每秒生成相当多的UUID,地球上所有生命的灭绝也会在你发生碰撞之前很久就会发生。