hel*_*dre 6 php algorithm uuid base64
我们在数据库中使用UUID作为主键(由php生成,存储在mysql中).问题在于,当有人想要编辑某些内容或查看他们的个人资料时,他们会在网址的末尾有这个巨大的,可怕的,丑陋的uuid字符串.(编辑?ID = .....)
如果我们只使用前8个字符,在第一个连字符之前的所有内容,它是否安全(读:仍然是唯一的)?
如果它不安全,是否有某种方法可以将其转换为更短的内容,以便在url中使用,可以将其转换回十六进制用作查找?我知道我可以对它进行base64编码,将其降低到22个字符,但还有更短的东西吗?
编辑我已经阅读了这个问题,它说使用base64.再一次,什么更短?
Nic*_*son 10
缩短UUID会增加碰撞的可能性.你可以做到,但这是一个坏主意.仅使用8个字符意味着只有4个字节的数据,因此一旦你有大约2 ^ 16个ID,就会发生碰撞 - 远非理想状态.
您最好的选择是获取UUID的原始字节(不是十六进制表示)并使用base64对其进行编码.或者,不要太担心,因为我严重怀疑您的用户关心URL中的内容.
不要从UUID中删除一个位:您无法控制生成它的算法,有多种可能的实现,算法实现可能会发生变化(例如:使用您正在使用的PHP版本更改)
如果你问我地址栏中的UUID看起来并不可怕或者很难,即使是简单的谷歌搜索"UUID"也会产生看起来最糟糕的URL,而且每个人都习惯于查看谷歌URL!
如果您想要更好看的URL,请查看此stackoverflow.com文章的地址栏.他们使用文章ID,然后是问题的标题.只有ID部分是相关的,其他一切都是为了让读者的眼睛变得容易(继续尝试它,你可以删除ID之后的任何东西,你可以用垃圾替换它 - 无关紧要).