Укороченная версия UUID4 - PullRequest
       12

Укороченная версия UUID4

1 голос
/ 18 марта 2019

Я генерирую в строках Python uuid4.

Я использую его для идентификации своих учетных записей служб, но одна из моих систем (учетные записи служб GCP) имеет ограничение в 30 символов, и уже слишком поздно что-то использоватьеще:

Service account ID must be between 6 and 30 characters.
Service account ID must start with a lower case letter, followed by one or more lower case alphanumerical characters that can be separated by hyphens.

Как получить более короткую версию UUID с ограниченным риском конфликта?

Я видел несколько взломов кодировки base64, но самое короткое, что я могу сделать, это 22В идеале, у меня было бы что-то вроде git commit hash, так как риск конфликта ограничен.

Ответы [ 2 ]

3 голосов
/ 18 марта 2019

Как я могу иметь более короткую версию UUID с ограниченным риском конфликта?

Удалить символ с индексом 12, поскольку это всегда 4 - не очень случайно.

Аналогично отбрасывает символ с индексом 16, поскольку он всегда равен 8 9 a b.

В [0-9a-f] у вас останется 30 довольно случайных символов.Столкновения все еще достаточно малы, чтобы их игнорировать.Обратите внимание, что uuid4s может начинаться с цифр, поэтому вам может понадобиться использовать выборку отклонения в вашем генераторе (или просто вырезать посредника и генерировать ваши идентификаторы напрямую с помощью random, реально здесь нет особого смысла использовать uuid4 вообще).

0 голосов
/ 18 марта 2019

Используйте первые 15 символов и последние 15 символов UUID.Опустить все, что между.

import uuid

uuid_str = str(uuid.uuid4()).replace("-","")
uuid_str = uuid_str[:15]+uuid_str[-15:]
...