【发布时间】:2010-03-12 18:35:41
【问题描述】:
我看到一些针对上传图像名称、会话 ID 等内容的唯一字符串生成实现退出,其中许多使用 SHA1 等哈希值或其他方法。
我并不是在质疑使用此类自定义方法的合法性,而只是质疑其原因。如果我想要一个唯一的字符串,我就这么说:
>>> import uuid
>>> uuid.uuid4()
UUID('07033084-5cfd-4812-90a4-e4d24ffb6e3d')
我已经完成了。在阅读 uuid 之前,我并不是很信任,所以我这样做了:
>>> import uuid
>>> s = set()
>>> for i in range(5000000): # That's 5 million!
>>> s.add(str(uuid.uuid4()))
...
...
>>> len(s)
5000000
没有一个中继器(考虑到赔率是 1.108e+50,我不希望现在有一个中继器,但看到它在行动中令人欣慰)。您甚至可以通过组合 2 个 uuid4()s 来制作您的字符串,从而降低一半的几率。
那么,话虽如此,人们为什么要花时间在 random() 和其他东西上以获得唯一的字符串等? uuid 是否存在重要的安全问题或其他问题?
【问题讨论】:
-
顺便说一句,将 uuid 的长度加倍会使可能值的数量成平方,而不仅仅是加倍。