Подтвердить что ты не робот

Безопасные URL UUID в наименьшем числе символов

В идеале я хотел бы получить что-то вроде example.com/resources/äFg4вNгё5, минимальное количество символов visible, неважно, что они должны быть закодированы в процентах, прежде чем передавать их по HTTP.

Можете ли вы рассказать схему, которая эффективно кодирует 128b UUID в наименьшее количество видимых символов, без результатов, имеющих символы, которые нарушают URL-адреса?

4b9b3361

Ответ 1

Base-64 подходит для этого.

{098ef7bc-a96c-43a9-927a-912fc7471ba2}

может быть закодирован как

vPeOCWypqUOSepEvx0cbog

Обычные знаки равенства в конце могут быть опущены, так как они всегда делают длину строки кратной 4. И вместо + и / вы можете использовать некоторые безопасные символы. Вы можете выбрать два из: - . _ ~

Дополнительная информация:

Ответ 2

Я использую строчную строку base64. Ниже приведен код Python, который делает это *.

Последняя строка удаляет знак '=' или '==', который кодирует кодирование базы 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('=', '')

* <Суб > Это соответствует стандартам: 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 октетов. Суб >