2013-08-28 94 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)。