如何最好"压缩"带有URL安全字符的32个字符的十六进制UUID?

时间:2016-09-01 03:20:03

标签: url hash encoding base64

我希望缩短数据库条目的UUID,以便使URL安全和可共享为永久链接。虽然我们可以拥有一个单独的缓存表"指针"对于那些字符较少的人,我想知道是否有更好的方法?

我能想到的最好的方法是base64编码它们而不是十六进制编码它们。这会将它们从32个字符缩短到22个左右。但是如果可能的话,我想尝试将这个字符设置为低于14个字符。 :/

1 个答案:

答案 0 :(得分:1)

我将在这里采取一些快速的数学计算,所以如果我错了请纠正我。 UUID是最基本的128位值(ref)。这意味着有2 ^ 128种可能性。

根据RFC 3986

  

URI中允许但没有保留的字符   目的被称为无保留。这些包括大写和小写   字母,十进制数字,连字符,句号,下划线和波浪号。

所以在朋友之间,我们可以说这是我们可以在URL中使用的66个未保留的ASCII字符(26 + 26 + 10 + 4)。

解决equation 2 ^ 128 - 66 ^ x = 0,x约为21.18,这意味着,就像你用base64的想法所说的那样,至少需要22个未保留的ASCII字符来对网址进行编码。 UUID(此时)和更少的字符不能100%使用。

话虽如此,表面上(在视觉上,在浏览器中)可能会使用unicode字符来表示更大部分的hexibits(例如example.com/uuid/☂☎♞ʤ☯......),但是基础URL将比32-hexibit UUID长得多,因为允许的URL字符受RFC限制。然而,这肯定是疯狂的,并且需要一些简洁的算法来很好地编码UUID。