2013-08-28 64 views
1

我有一个我想要在网络用户界面中显示的实体数据库。我想要一个简短的字母数字字符串,我可以从实体的密钥中生成。我得出的结论是base32是一个很好的解决方案(特别是因为我想让这些密钥不区分大小写,所以可以用口头方式阅读等)。是否有比以下更短或更高的空间效率?网址的Python密钥生成策略

import base64 
def b32urlencode(x): 
    return base64.b32encode(x).strip('=').lower() 

def b32urldecode(x): 
    return base64.b32decode(x + ('=' * (8 - (len(x) % 8)))) 
+1

为什么Base32而不是Base64?后者更紧凑,只需稍作调整即可成为有效的URL段落。 –

+1

请参见[将UUID 32个字符的十六进制字符串转换为“YouTube风格”简称,并返回](http://stackoverflow.com/a/12270917)。 –

+1

这非常有趣(我正在看它)。我选择base32是因为我希望它不区分大小写(例如,在需要通过电话阅读时)。 – Aaron

回答

1

答案取决于您希望URL的人类可读和可类型化的方式。

Base64编码使用大写和小写字母加-+_/=。大小写可能会或可能不会被您的Web服务器或应用程序所区分,具体取决于您如何配置它们。如果您希望用户能够键入URL(不只是点击它们),那么即使服务器允许它们容忍,大写和小写字母也可能成为问题。根据上述情况,考虑基数62(a-z,A-Z和0-9)或36(a-z大小写不敏感和0-9)。