Генерировать uuid из 22 символов? - PullRequest
0 голосов
/ 20 февраля 2019

Мне нужно сгенерировать uuid в python.

Приложение, с которым я хочу взаимодействовать, использует 22 символа uuids.Похоже, что они генерируются путем генерации char-32 uuid и его кодировки base64.

Теперь, если я попытаюсь сделать это в python, мой (закодированный base64) uuid всегда содержит 24 символа.

На данный момент я просто «обрезал» закодированный uuid после 22 символов.Не уверен, если это действительно так.Скорее всего, я получу дубликаты таким образом.Может быть, я ошибаюсь при создании моего uuid?

Мой код:

import uuid
import base64

my_uuid = new_occ_id = base64.urlsafe_b64encode(uuid.uuid4().bytes)
my_uuid_22 = new_occ_id = my_uuid[0:22]
print(my_uuid)
print(my_uuid_22)

... дает (!! исправленный вывод !!):

b'1K-HAjUjEemzDxwbtRxjwA=='
b'1K-HAjUjEemzDxwbtRxjwA'

Образец UUID из приложения:

051MZjd97kcBgtZiEH}IvW

1 Ответ

0 голосов
/ 20 февраля 2019

Вы уверены, что это выход из этого кода?это не так, первая строка имеет 22 байта (не 24), а вторая не имеет завершающей кавычки.Во всяком случае ...

Я не знаю о реализации 22-байтового сжатого UUID, но исходя из того, как работает кодирование base64, если это действительно используется, я бы сказал, что да, вы можете просто отбросить последнийдва символа.

Последние два символа base64 всегда будут двумя символами заполнения == при вводе 16 байтов, поскольку base64 одновременно кодирует 3 байта (15 при выходе 20), оставляя один одиночныйвходной байт, который требует заполнения.Декодеры иногда требуют наличия заполнения, но иногда игнорируют их, поскольку они могут быть рассчитаны и не содержат никаких фактических данных.

Однако, как кто-то сказал, "}" не используется в большинствеобщий набор символов base64, и не в urlsafe.Обычно отличаются только последние два символа, обычно они + / или в urlsafe -_, но ваша реализация использует {и что-то еще.Дикая догадка это} или |но вам придется просмотреть существующие сжатые uuids, чтобы увидеть, если вы найдете другой символ вне символов A-Za-z0-9, если вы не можете найти спецификацию для вашего целевого приложения.

...