Bộ Giải Mã và Xác Thực UUID

Giải mã và xác thực UUID để trích xuất phiên bản, dấu thời gian và siêu dữ liệu

Thử các ví dụ này:

UUID Decoding là gì?

Giải mã UUID là quá trình phân tích một UUID để trích xuất thông tin về:

  • Version: Phiên bản UUID nào (1-8) dựa trên 4 bit ở vị trí 48-51
  • Variant: Biến thể UUID nào (thường là RFC 4122) dựa trên bit 64-65
  • Components: Trích xuất dấu thời gian, ID nút, hoặc dữ liệu khác dựa trên phiên bản
  • Thời gian tạo: Đối với UUID dựa trên thời gian (v1, v6, v7)

Example: 123e4567-e89b-12d3-a456-426614174000 là UUID Phiên bản 1 được tạo vào ngày 2018-10-03 09:45:32 UTC.

Tổng quan cấu trúc UUID

FormatDescription
8-4-4-4-1232 chữ số thập lục phân nhóm với dấu gạch ngang
Bit phiên bảnBit 48-51 (ký tự thứ 13)
Bit biến thểBit 64-65 (ký tự thứ 17)

Số phiên bản xuất hiện như chữ số thập lục phân đầu tiên trong nhóm thứ ba (ví dụ, 123e4567-e89b-12d3-a456-426614174000 cho phiên bản 1).

Giải mã theo Phiên bản UUID

VersionNhững gì có thể được giải mã
UUID v1
  • Dấu thời gian (độ chính xác 100ns, kể từ ngày 15 tháng 10 năm 1582)
  • Địa chỉ MAC (nếu không bị ngẫu nhiên hóa)
  • Chuỗi đồng hồ (để tránh va chạm)
UUID v3/v5
  • Không thể giải mã đầu vào gốc
  • Có thể xác minh nếu được tạo từ đầu vào đã biết
  • Có thể phân biệt giữa v3 (MD5) và v5 (SHA-1)
UUID v4
  • Chỉ dữ liệu ngẫu nhiên
  • Không có thông tin có thể trích xuất
  • Có thể xác minh đây là UUID v4 hợp lệ
UUID v6
  • Dấu thời gian (độ chính xác 100ns, kể từ ngày 15 tháng 10 năm 1582)
  • Địa chỉ MAC (nếu không bị ngẫu nhiên hóa)
  • Chuỗi đồng hồ (để tránh va chạm)
UUID v7
  • Dấu thời gian Unix (độ chính xác mili giây)
  • Thành phần ngẫu nhiên (không thể giải mã)
ULID
  • Dấu thời gian Unix (độ chính xác mili giây)
  • Thành phần ngẫu nhiên (không thể giải mã)

Trích xuất dấu thời gian từ UUID

Loại UUIDPhương pháp trích xuất thời gianEpoch
UUID v1Kết hợp bit 0-31, 32-47, và 48-59, sắp xếp lại các thành phần dấu thời gianNgày 15 tháng 10 năm 1582
UUID v6Trích xuất bit 0-59 (đã đúng thứ tự)Ngày 15 tháng 10 năm 1582
UUID v7Trích xuất bit 0-47 (mili giây Unix)Ngày 1 tháng 1 năm 1970
ULIDGiải mã 10 ký tự Base32 đầu tiên để lấy mili giây Unix 48-bitNgày 1 tháng 1 năm 1970

Quy tắc xác thực UUID

  • Kiểm tra định dạng: 8-4-4-4-12 chữ số thập lục phân với dấu gạch ngang
  • Kiểm tra phiên bản: Ký tự thứ 13 phải là 1-8
  • Kiểm tra biến thể: Ký tự thứ 17 phải là 8, 9, A hoặc B (theo RFC 4122)

Biểu thức chính quy để xác thực UUID cơ bản:

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

Ứng dụng thực tiễn

  • Phân tích pháp y: Xác định khi nào ID được tạo
  • Debugging: Theo dõi hành vi hệ thống qua dấu thời gian ID
  • Auditing: Xác thực tính hợp lệ theo trình tự thời gian
  • Phân tích bảo mật: Phát hiện ID giả mạo hoặc bị thao túng
  • Phục hồi dữ liệu: Tái cấu trúc các mối quan hệ thời gian
  • Di cư hệ thống: Hiểu chi tiết triển khai UUID cũ

Trích xuất địa chỉ MAC (v1/v6)

Đối với UUID v1 và v6, bạn thường có thể trích xuất định danh nút (địa chỉ MAC) nếu nó không bị ngẫu nhiên hóa trong quá trình tạo:

  1. Trích xuất 12 chữ số thập lục phân cuối cùng (48 bit) từ UUID
  2. Định dạng với dấu hai chấm như XX:XX:XX:XX:XX:XX
  3. Kiểm tra xem địa chỉ MAC là thật hay ngẫu nhiên bằng cách xem bit multicast

Nếu byte đầu tiên có bit 0x01 được đặt, có khả năng đó là ID nút ngẫu nhiên thay vì địa chỉ MAC thực sự.

Câu hỏi thường gặp

Tôi có thể xác định chính xác khi nào UUID v4 được tạo không?

Không. UUID v4 hoàn toàn ngẫu nhiên và không chứa thông tin dấu thời gian. Thời điểm tạo không thể xác định từ giá trị UUID v4.

Dấu thời gian trong UUID dựa trên thời gian chính xác đến mức nào?

Dấu thời gian UUID v1/v6 có độ chính xác 100 nanô giây. UUID v7 và ULID có độ chính xác mili giây. Tuy nhiên, độ chính xác thực tế của đồng hồ hệ thống có thể khác nhau.

Tôi có thể chuyển đổi giữa các phiên bản UUID không?

Không, bạn không thể chuyển đổi trực tiếp giữa các phiên bản trong khi giữ nguyên giá trị định danh. Các phiên bản khác nhau có cấu trúc cơ bản khác nhau.

Tôi có thể xác định máy tính tạo UUID v1 không?

Nếu ID nút không bị ngẫu nhiên hóa, UUID v1 có thể chứa địa chỉ MAC của hệ thống tạo ra. Tuy nhiên, nhiều triển khai hiện đại ngẫu nhiên hóa điều này để bảo vệ quyền riêng tư.

Làm sao để biết UUID có hợp lệ không?

Kiểm tra định dạng (8-4-4-4-12 chữ số thập lục phân), xác minh chữ số phiên bản (ký tự thứ 13) là 1-8, và xác nhận các bit biến thể (ký tự thứ 17 là 8, 9, A hoặc B đối với UUID RFC 4122).

Resources