Различия между библиотеками поколения UUIDv4 - и - просто созданием собственной со случайными шестнадцатеричными символами или битами

На тему состава UUID4, согласно Википедии.. .

UUID версии 4 имеют вид xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx, где x — любая шестнадцатеричная цифра, а y — одна из 8, 9, A или B.

Итак, я могу придумать три возможных метода, которые программист может использовать для генерации случайного UUID4:

Метод A) Используйте «правильную» библиотеку генерации UUID4, которая уже существует.

-or-

Метод Б) Создайте свой собственный, просто используя случайные шестнадцатеричные символы в строке:

  • Начните со строки «xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx».
  • Замените символы «x» случайными шестнадцатеричными символами (0–9a–f).
  • Замените «y» любым из: 8 9 a b

Приведенные выше шаги являются лишь одним простым примером того, как это можно сделать в виде строки символов. Пожалуйста, считайте, что любой другой метод, работающий со строкой символов и случайно выбранными шестнадцатеричными символами, по-прежнему является «MethodB», например, начиная с пустой строки и добавляя символы по одному.

-or-

Метод C: Создайте свой собственный с побитовыми операциями:

Я предполагаю, что так делают большинство библиотек? Использование в основном случайных битов при обеспечении того, чтобы «4» и «8/9/a/b» были в окончательной сгенерированной строке.

Вопросы:

Q1: Существуют ли технические различия в результирующем UUIDv4, который будет создан с точки зрения их случайности или общей совместимости с базами данных и т. д., в которых будет храниться UUIDv4?

Q2: Есть ли недостатки в использовании метода № 2 (случайные шестнадцатеричные символы) вместо № 1 или № 3 (побитовый)?

Q3: Делают ли «правильные» библиотеки генерации UUIDv4 в MethodA что-то особенное помимо того, как это делают простые подходы в MethodB и MethodC?

Q4: Любой метод больше похож на конфликты?

Q5: Являются ли результирующие UUID, сгенерированные методом MethodB + MethodC, полностью совместимыми со спецификацией UUIDv4 (даже если они не соответствуют своей методологии для достижения этой цели).

Примечания:

  • Этот вопрос относится только к UUID версии 4.
  • Очевидно, что проще просто использовать библиотеку, я просто спрашиваю о различиях в полученном сгенерированном UUIDv4 результате, а не о количестве усилий, которые вкладывает программист.
  • Я также не очень обеспокоен производительностью с вышеуказанными вопросами. Но если у вас также есть какие-либо комментарии по этому поводу, это тоже может быть интересно. Я бы предположил, что библиотеки лучше работают.

person LaVache    schedule 04.04.2016    source источник
comment
В чем именно здесь вопрос? Stack Overflow не является дискуссионным веб-сайтом, поэтому, если вы надеетесь начать обсуждение плюсов и минусов использования собственного метода создания руководства, тогда вопрос будет закрыт.   -  person Lasse V. Karlsen    schedule 04.04.2016
comment
Казалось бы, если использовать хороший случайный источник, то разницы быть не должно. Поскольку фактическое создание не указано, кроме случайного, то любая случайная генерация должна соответствовать спецификации.   -  person Lasse V. Karlsen    schedule 04.04.2016
comment
Суть вопроса в том, в чем технические отличия результата и с какими проблемами я сталкиваюсь, если не использую библиотеку. Я не спрашиваю мнения или плюсы/минусы. Я прошу технические факты. Я был бы очень признателен, если бы вы не закрыли вопрос исключительно из-за неправильной интерпретации формулировки вопроса как запроса мнений, а это не так. Я потратил около часа на его написание, пытаясь объяснить, что это технический вопрос с правильными и неправильными ответами. Во многих случаях вопросы не удалялись бы, если бы предложения были слегка перефразированы.   -  person LaVache    schedule 04.04.2016


Ответы (1)


Q1: Существуют ли какие-либо технические различия в результирующем UUIDv4, которые будут генерироваться с точки зрения их случайности или общей совместимости с базами данных и т. д., в которых будет храниться UUIDv4?

Технически никакой разницы.

Q2: Есть ли недостатки в использовании метода № 2 (случайные шестнадцатеричные символы) вместо № 1 или № 3 (побитовый)?

Нет недостатков; не совсем.

Q3: Делают ли «правильные» библиотеки генерации UUIDv4 в MethodA что-то особенное помимо того, как это делают простые подходы в MethodB и MethodC?

Библиотеки обычно делают именно то, что подразумевает MethodC.

Q4: Любой метод больше похож на конфликты?

Не совсем.

Q5: Являются ли результирующие UUID, сгенерированные методом MethodB + MethodC, полностью совместимыми со спецификацией UUIDv4 (даже если они не соответствуют своей методологии для достижения этой цели).

да.

Успешное создание (вариант RFC 4122) UUID версии 4 не сложно; но требует некоторого понимания генерации случайных чисел. Например, разница между генерацией «псевдослучайных» чисел и генерацией случайных чисел «крипто» качества.

Например, очень простой генератор «псевдослучайных» чисел часто будет давать одну и ту же серию «случайных» чисел; что часто достаточно раздражает, что можно ввести «начальное число» для изменения последовательности случайных чисел.

Конечно, также раздражает генерировать одни и те же UUID каждый раз, когда вызывается генератор UUID. Следовательно, генератор «псевдослучайных» чисел не идеален для генерации UUID.

Случайные числа «крипто» качества, возможно, гораздо более случайны и используются большинством генераторов UUID версии 4.

Короче говоря, лучшие генераторы UUID версии 4 основаны на лучших генераторах случайных чисел. В разделе 4.4 RFC 4122 приводятся рекомендации по достижению более высокой степени случайности UUID версии 4. .

Существует COMB UUID, полученный из варианта RFC 4122. это может быть вам интересно.

-- БОНУС: вы можете посетить страницу Махонри Морианкумера UUID и GUID Generator and Forensics. . Он использует генератор случайных чисел криптографического качества для генерации UUID версии 4.

person Mahonri Moriancumer    schedule 10.04.2016