UUID v3 Generator

Menghasilkan UUID v3 deterministik berbasis nama menggunakan MD5

Namespace

6ba7b810-9dad-11d1-80b4-00c04fd430c8

Nama

UUID v3 yang Dibuat

Masukkan nama dan klik Buat
Namespace + nama yang sama selalu menghasilkan UUID yang sama
Note:UUID v3 adalah format warisan yang menggunakan hashing MD5. Untuk pengembangan baru yang memerlukan UUID deterministik, lebih pilih UUID v5 (SHA-1). Untuk ID unik tujuan umum, gunakan UUID v4.

Apa itu UUID v3?

UUID v3 adalah versi UUID berbasis nama yang didefinisikan dalam RFC 4122. Alih-alih data acak atau timestamp, UUID v3 menurunkan UUID secara deterministik dari dua input: UUID namespace dan string nama.

Properti kunci UUID v3 adalah determinisme: namespace dan nama yang sama akan selalu menghasilkan UUID yang identik, di mesin mana pun, kapan pun.

UUID v3 menggunakan MD5 sebagai fungsi hash. MD5 dianggap rusak secara kriptografi untuk tujuan keamanan, itulah mengapa UUID v5 (yang menggunakan SHA-1) umumnya lebih disukai untuk pengembangan baru.

Namespace Standar

RFC 4122 mendefinisikan empat UUID namespace yang telah ditetapkan sebelumnya:

NamespaceUUIDGunakan untuk
DNS6ba7b810-9dad-11d1-80b4-00c04fd430c8Nama domain yang sepenuhnya memenuhi syarat (misalnya 'example.com')
URL6ba7b811-9dad-11d1-80b4-00c04fd430c8URL dan URI (misalnya 'https://example.com/resource')
OID6ba7b812-9dad-11d1-80b4-00c04fd430c8Object Identifier ISO (misalnya '1.2.840.113556')
X.5006ba7b814-9dad-11d1-80b4-00c04fd430c8Distinguished Name X.500 (misalnya 'cn=John,dc=example,dc=com')

Anda juga dapat menggunakan UUID arbitrer apa pun sebagai namespace kustom.

UUID v3 vs UUID v5

UUID v3 dan UUID v5 identik secara struktural — keduanya adalah UUID deterministik berbasis nama. Satu-satunya perbedaan adalah fungsi hash:

UUID v3
  • Menggunakan hashing MD5
  • Output 128-bit (ukuran UUID)
  • Didefinisikan dalam RFC 4122
  • MD5 rusak secara kriptografi
  • Didukung oleh semua library UUID
UUID v5
  • Menggunakan hashing SHA-1
  • Hash 160-bit dipotong menjadi 128 bit
  • Didefinisikan dalam RFC 4122
  • SHA-1 tidak digunakan lagi untuk keamanan tetapi lebih kuat dari MD5
  • Didukung oleh semua library UUID

Lebih pilih UUID v5 daripada UUID v3 untuk semua pengembangan baru.

Kapan Menggunakan UUID v3

UUID v3 (dan v5) tepat ketika Anda membutuhkan identifier yang stabil dan dapat direproduksi yang diturunkan dari nama yang bermakna:

Kanonisasi URL
Hasilkan UUID deterministik untuk URL apa pun untuk digunakan sebagai kunci panjang tetap yang kompak dalam database atau cache.
Identifier berbasis DNS
Tetapkan UUID stabil ke nama host atau nama domain yang tetap konsisten di seluruh penerapan.
Pengalamatan konten
Buat ID yang dapat direproduksi untuk item konten yang diidentifikasi oleh nama kanoniknya.
Pembuatan sumber daya idempoten
Hasilkan UUID yang sama untuk nama sumber daya yang sama, sehingga upaya pembuatan berulang secara alami idempoten.
Fixture pengujian
Hasilkan UUID yang stabil dan dapat diprediksi dalam data uji.
Deduplikasi lintas sistem
Dua sistem independen dapat menurunkan UUID yang sama untuk nama yang sama tanpa komunikasi.

Memahami Determinisme

Determinisme UUID v3 adalah kekuatan terbesarnya sekaligus batasannya yang paling penting.

Contoh (namespace DNS, nama = 'example.com'):9073926b-929f-31c2-abc9-fad77ae3e8eb

Selalu menghasilkan: 9073926b-929f-31c2-abc9-fad77ae3e8eb

Jika penyerang mengetahui namespace dan dapat menebak namanya, mereka dapat menghitung nilai UUID v3 terlebih dahulu. Nilai UUID v3 tidak boleh digunakan sebagai token yang tidak dapat ditebak.

Contoh Kode

UUID v3 memerlukan UUID namespace dan string nama. Gunakan paket uuid standar:

JavaScript / Node.js
// Browser / Node.js — UUID v3 without dependencies
function uuidV3(namespace, name) {
  // namespace must be a UUID string like '6ba7b810-9dad-11d1-80b4-00c04fd430c8'
  const nsBytes = namespace.replace(/-/g, '').match(/../g).map(h => parseInt(h, 16))
  const nameBytes = [...new TextEncoder().encode(name)]
  const combined = new Uint8Array([...nsBytes, ...nameBytes])

  // md5(combined) — use your preferred MD5 library or the inline implementation
  const hash = md5(combined) // returns Uint8Array(16)
  hash[6] = (hash[6] & 0x0f) | 0x30 // version 3
  hash[8] = (hash[8] & 0x3f) | 0x80 // variant

  const h = [...hash].map(b => b.toString(16).padStart(2, '0')).join('')
  return `${h.slice(0,8)}-${h.slice(8,12)}-${h.slice(12,16)}-${h.slice(16,20)}-${h.slice(20)}`
}

// Using the 'uuid' npm package
import { v3 as uuidv3 } from 'uuid'
const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'
console.log(uuidv3('example.com', uuidv3.DNS))
// → '9073926b-929f-31c2-abc9-fad77ae3e8eb' (always the same)
Python
import uuid

# Using the standard library
dns_uuid = uuid.uuid3(uuid.NAMESPACE_DNS, 'example.com')
print(dns_uuid)
# → 9073926b-929f-31c2-abc9-fad77ae3e8eb

url_uuid = uuid.uuid3(uuid.NAMESPACE_URL, 'https://example.com/page')
print(url_uuid)

# Custom namespace
MY_NS = uuid.UUID('a1b2c3d4-e5f6-7890-abcd-ef1234567890')
custom = uuid.uuid3(MY_NS, 'my-entity-name')
print(custom)
Go
package main

import (
    "fmt"
    "github.com/google/uuid"
)

func main() {
    // Standard DNS namespace
    ns := uuid.MustParse("6ba7b810-9dad-11d1-80b4-00c04fd430c8")
    id := uuid.NewMD5(ns, []byte("example.com"))
    fmt.Println(id)
    // → 9073926b-929f-31c2-abc9-fad77ae3e8eb

    // URL namespace
    urlNS := uuid.MustParse("6ba7b811-9dad-11d1-80b4-00c04fd430c8")
    idURL := uuid.NewMD5(urlNS, []byte("https://example.com/page"))
    fmt.Println(idURL)
}

Pertanyaan yang Sering Diajukan

Apakah UUID v3 dan UUID v5 dapat dipertukarkan?
Tidak — keduanya menghasilkan output yang berbeda untuk input yang sama karena menggunakan fungsi hash yang berbeda (MD5 vs SHA-1).
Apakah UUID v3 tahan terhadap tabrakan?
Dalam namespace tertentu, dua nama berbeda akan menghasilkan nilai UUID v3 yang berbeda selama MD5 tidak menghasilkan tabrakan untuk input tersebut.
Bisakah saya menggunakan UUID v3 sebagai kunci primer database?
Ya, jika Anda memahami trade-offnya. UUID v3 bersifat deterministik, sehingga kunci yang sama akan dihasilkan untuk nama yang sama.
Pengkodean apa yang harus saya gunakan untuk input nama?
RFC 4122 menentukan bahwa nama harus dikonversi ke byte menggunakan bentuk kanonik namespace.
Apakah UUID v3 menyembunyikan nama aslinya?
MD5 adalah fungsi satu arah — Anda tidak dapat membalik UUID v3 untuk mendapatkan kembali nama aslinya.