Генерация, казалось бы, случайных на вид уникальных чисел для целей URL - PullRequest
0 голосов
/ 28 сентября 2019

Так что мне было интересно о URL YouTube.Специально идентификатор видео watch?v=XZmGGAbHqa0.То же самое для аналогичных сервисов tinyurl.

Я наткнулся на видео Тома У YouTube когда-нибудь закончатся идентификаторы видео? Это было довольно интересно.Но генерация, казалось бы, случайного числа случайным образом, проверка на наличие дубликатов выглядела довольно дорого.

Если вы не смотрели видео, YouTube генерирует большое уникальное число, а base64 кодирует его.Не уверен, что весь процесс внутри youtube такой простой, но я пытаюсь написать что-то похожее.

Я наткнулся на математическую функцию под названием Modular Multiplicative Inverse., использующую ее вместе с небольшим расширенным евклидовым алгоритмом сгенерирует уникальный номер из нашего заданного ввода.Возможно и обратное, но кто-то не сможет легко перевернуть или грубую силу, не зная семян.Таким образом, мы можем легко получить большое случайное число из нашего последующего идентификатора в базе данных.Может быть, даже base64.

Но у меня есть путаница.

Как упоминалось в видео, синхронизация последующего идентификатора между несколькими серверами может привести к проблемам и накладным расходам.Но если мы не сделаем это последующим, не будет ли утомительной и дорогой задачей найти уникальный идентификатор?Мы должны проверить, доступен ли идентификатор в db.

Следует ли мне избегать смешивания в URL с последующими идентификаторами?Или хорошо маскировать его чем-то вроде этого Multiplicative Inverse?

Зачем мне это base64?Чтобы сохранить память или сохранить пространство URL?Мне все еще нужно было бы генерировать что-то случайное, уникальное и иметь возможность быстро сгенерировать это без дублирования и поиска.

Есть ли лучшие способы добиться того, что я пытаюсь сделать?Я проверил все подобные вопросы и несколько постов в блоге.Из которых это

Извините, если я не смог хорошо объяснить, я совершенно запутался, что спросить.

1 Ответ

1 голос
/ 28 сентября 2019

Именно поэтому вы обходите проблему обеспечения уникальности случайно сгенерированных чисел и используете семейство псевдослучайных перестановок (PRP) для преобразования предварительно скоординированного счетчика.

Семейство PRP похоже на семейство PRF вчто это шифр, который берет ключ и открытый текст и создает зашифрованный текст, за исключением того, что он имеет однозначную карту между открытыми текстами и зашифрованными текстами.

Это позволяет использовать дизайн в виде снежинки Twitter, а затем простозакодируйте внутренние последовательные идентификаторы в непоследовательные внешние идентификаторы.

См. Алгоритм превращения числовых идентификаторов в короткие, различные буквенно-цифровые коды для реализации в Python.

Также

М.Люби и К. Рэкофф.Как построить псевдослучайные перестановки из псевдослучайных функций.SIAM J. Comput., 17 (2): 373–386, апрель 1988 г.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...