Декодер та Валідатор UUID

Декодуйте та валідуйте UUID для витягу версії, часових міток та метаданих

Спробуйте ці приклади:

Що таке декодування UUID?

Декодування UUID — це процес аналізу UUID для отримання інформації про:

  • Версію: Яка версія UUID (1-8) на основі 4 бітів у позиції 48-51
  • Варіант: Який варіант UUID (зазвичай RFC 4122) на основі бітів 64-65
  • Компоненти: Видобуток часової мітки, ID вузла або інших даних залежно від версії
  • Час створення: Для UUID на основі часу (v1, v6, v7)

Приклад: d4e5f6a7-b8c9-11e9-b456-789abcdef012 — це UUID Версії 1, створений 2020-01-14 08:15:27 UTC.

Огляд структури UUID

ФорматОпис
8-4-4-4-1232 шістнадцяткових цифри, згруповані дефісами
Біти версіїБіти 48-51 (13-та цифра)
Біти варіантуБіти 64-65 (17-та цифра)

Номер версії відображається як перша шістнадцяткова цифра в третій групі (наприклад, 123e4567-e89b-12d3-a456-426614174000 для версії 1).

Декодування за версією UUID

ВерсіяЩо можна декодувати
UUID v1
  • Часова мітка (з точністю 100нс, від 15 жовтня 1582 року)
  • MAC-адреса (якщо не рандомізована)
  • Послідовність годинника (для уникнення колізій)
UUID v3/v5
  • Неможливо декодувати оригінальне вхідне значення
  • Можна перевірити, чи створено з відомих вхідних даних
  • Можна розрізнити між v3 (MD5) та v5 (SHA-1)
UUID v4
  • Лише випадкові дані
  • Немає інформації для видобутку
  • Можна перевірити, чи це дійсний UUID v4
UUID v6
  • Часова мітка (з точністю 100нс, від 15 жовтня 1582 року)
  • MAC-адреса (якщо не рандомізована)
  • Послідовність годинника (для уникнення колізій)
UUID v7
  • Unix-мітка часу (з точністю до мілісекунд)
  • Випадковий компонент (не декодується)
ULID
  • Unix-мітка часу (з точністю до мілісекунд)
  • Випадковий компонент (не декодується)

Видобуток часових міток з UUID

Тип UUIDМетод видобутку часуЕпоха
UUID v1Об'єднання бітів 0-31, 32-47 та 48-59, перевпорядкування компонентів часової мітки15 жовтня 1582 року
UUID v6Видобуток бітів 0-59 (вже в правильному порядку)15 жовтня 1582 року
UUID v7Видобуток бітів 0-47 (мілісекунди Unix)1 січня 1970 року
ULIDДекодування перших 10 символів Base32 для отримання 48-бітного Unix-часу в мілісекундах1 січня 1970 року

Правила валідації UUID

  • Перевірка формату: 8-4-4-4-12 шістнадцяткових цифр з дефісами
  • Перевірка версії: 13-й символ має бути 1-8
  • Перевірка варіанту: 17-й символ має бути 8, 9, A або B (для RFC 4122)

Регулярний вираз для базової валідації UUID:

^[0-9a-f]8-[0-9a-f]4-[1-8][0-9a-f]3-[89ab][0-9a-f]3-[0-9a-f]12$

Практичні застосування

  • Криміналістичний аналіз: Визначення, коли були створені ідентифікатори
  • Налагодження: Відстеження поведінки системи через часові мітки ідентифікаторів
  • Аудит: Перевірка хронологічної цілісності
  • Аналіз безпеки: Виявлення підроблених чи маніпульованих ідентифікаторів
  • Відновлення даних: Реконструкція часових взаємозв'язків
  • Міграції систем: Розуміння деталей реалізації успадкованих UUID

Видобуток MAC-адреси (v1/v6)

Для UUID v1 та v6 часто можна видобути ідентифікатор вузла (MAC-адресу), якщо він не був рандомізований під час генерації:

  1. Видобудьте останні 12 шістнадцяткових цифр (48 бітів) з UUID
  2. Форматуйте з двокрапками як XX:XX:XX:XX:XX:XX
  3. Перевірте, чи MAC-адреса справжня чи випадкова, перевіривши біт групової розсилки

Якщо перший байт має встановлений біт 0x01, швидше за все, це рандомізований ідентифікатор вузла, а не справжня MAC-адреса.

Часті запитання

Чи можу я точно визначити, коли було створено UUID v4?

Ні. UUID v4 повністю випадковий без інформації про часову мітку. Час створення неможливо визначити з значення UUID v4.

Наскільки точні часові мітки в UUID на основі часу?

Часові мітки UUID v1/v6 мають точність 100 наносекунд. UUID v7 та ULID мають точність до мілісекунд. Однак фактична точність системного годинника може відрізнятися.

Чи можу я конвертувати між версіями UUID?

Ні, ви не можете конвертувати безпосередньо між версіями, зберігаючи те саме значення ідентифікатора. Різні версії мають фундаментально різні структури.

Чи можу я ідентифікувати комп'ютер, який згенерував UUID v1?

Якщо ідентифікатор вузла не був рандомізований, UUID v1 може містити MAC-адресу системи, що генерувала. Однак багато сучасних реалізацій рандомізують це з міркувань конфіденційності.

Як можна визначити, чи UUID дійсний?

Перевірте формат (8-4-4-4-12 шістнадцяткових цифр), переконайтеся, що цифра версії (13-й символ) становить 1-8, і підтвердіть біти варіанту (17-й символ — 8, 9, A або B для UUID RFC 4122).

Ресурси