URL安全的UUID,字符数最少

Jes*_*ose 14 language-agnostic uuid

理想情况下,我希望像example.com/resources/äFg4?N??5最小数量的可见字符,但不要介意它们必须在通过HTTP传输之前进行百分比编码.

你能告诉一个方案,它可以有效地将128b UUID编码为最少数量的可见字符,而不会产生具有破坏URL的字符的结果吗?

Mar*_*rot 18

Base-64对此有好处.

{098ef7bc-a96c-43a9-927a-912fc7471ba2}
Run Code Online (Sandbox Code Playgroud)

可编码为

vPeOCWypqUOSepEvx0cbog
Run Code Online (Sandbox Code Playgroud)

最后通常的等号可以被删除,因为它们总是使字符串长度为4的倍数.而不是+/,你可以使用一些安全的字符.你可以选择两个:- . _ ~

更多信息:


Chr*_*row 5

我使用 url-safe base64 字符串。以下是执行此操作的一些 Python 代码*

最后一行删除了base 64编码喜欢放在末尾的'='或'=='符号,它们使将字符放入URL变得更加困难,并且只需要对信息进行解码,不需要在这里完成。

import base64
import uuid

# get a UUID - URL safe, Base64
def get_a_Uuid():
    r_uuid = base64.urlsafe_b64encode(uuid.uuid4().bytes)
    return r_uuid.replace('=', '')
Run Code Online (Sandbox Code Playgroud)

* 确实遵循标准:base64.urlsafe_b64encode遵循 RFC 3548 和 4648,请参阅https://docs.python.org/2/library/base64.html==允许从已知长度的 base64 编码数据中剥离,参见RFC 4648 §3.2。UUID/GUID 在RFC 4122中指定; §4.1 格式声明“UUID 格式为 16 个八位字节”。所述base64-fucntion编码这些16个八比特组。

  • 不适用于python3,您应该使用:`return base64.urlsafe_b64encode(uuid.uuid4().bytes).strip("=")`(也适用于python 2,返回unicode字符串)。 (2认同)