【发布时间】:2010-12-30 16:01:54
【问题描述】:
我们使用 UUID 作为 db 中的主键(由 php 生成,存储在 mysql 中)。问题是,当有人想要编辑某些东西或查看他们的个人资料时,他们在 url 的末尾有一个巨大的、可怕的、丑陋的 uuid 字符串。 (编辑?id=.....)
如果我们只使用前 8 个字符,即第一个连字符之前的所有字符,是否安全(阅读:仍然是唯一的)?
如果它不安全,是否有某种方法可以将其转换为更短的内容以便在 url 中使用,可以将其转换回十六进制以用作查找?我知道我可以对其进行 base64 编码以将其减少到 22 个字符,但还有更短的吗?
编辑 我读过this question,它说使用base64。再说一遍,还有更短的吗?
【问题讨论】:
-
您是否希望 UUID 的前 8 个字符以外的所有字符都是多余的?他们在那里使它独一无二。无论哪种方式,如果它是 8 个字符而不是 22 个字符,您真的认为这会带来更友好的用户体验吗?我不会花时间担心这个。我在地址栏中看到过更疯狂的 URI,它当然不会影响网站的可用性。
-
我在想类似于如何缩短 md5 哈希值(在某处读过但不记得在哪里),因为字符对于某个子字符串具有均匀分布。
-
我明白了。加密散列函数预计具有可接受的冲突发生水平,截断输出字符串只会增加这种机会。您的情况不能承受任何“冲突”的机会(一个 id 指向多个记录)。