UUID v3 Generator

Generate deterministic name-based UUID v3 using MD5

Namespace

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

Naam

Gegenereerde UUID v3

Voer een naam in en klik op Genereren
Dezelfde namespace + naam levert altijd dezelfde UUID op
Note:UUID v3 is een legacy-formaat dat MD5-hashing gebruikt. Voor nieuwe ontwikkeling die deterministische UUIDs vereist, geef de voorkeur aan UUID v5 (SHA-1). Voor algemene unieke ID's gebruik UUID v4.

Wat is UUID v3?

UUID v3 is een op naam gebaseerde UUID-versie gedefinieerd in RFC 4122. In plaats van willekeurige gegevens of een tijdstempel leidt het de UUID deterministisch af van twee invoeren: een namespace-UUID en een naam-string. Het namespace + naam-paar wordt gehasht met MD5, en de resulterende hash wordt opgemaakt als een UUID.

De sleuteleigenschap van UUID v3 is determinisme: dezelfde namespace en naam zullen altijd de identieke UUID produceren, op elke machine, op elk moment. Dit maakt het geschikt voor content-adressering — stabiele identificatoren genereren voor resources die worden geïdentificeerd door een betekenisvolle naam.

UUID v3 gebruikt MD5 als hash-functie. MD5 wordt beschouwd als cryptografisch gebroken voor beveiligingsdoeleinden, wat de reden is dat UUID v5 (dat SHA-1 gebruikt) over het algemeen de voorkeur heeft voor nieuwe ontwikkeling. Noch v3 noch v5 biedt willekeurigheid — ze zijn puur deterministisch.

Standaard namespaces

RFC 4122 definieert vier vooraf toegewezen namespace-UUIDs. Het gebruik van een standaard namespace zorgt voor interoperabiliteit — twee onafhankelijke implementaties zullen dezelfde UUID v3 produceren voor dezelfde naam binnen dezelfde namespace:

NamespaceUUIDGebruik voor
DNS6ba7b810-9dad-11d1-80b4-00c04fd430c8Volledig gekwalificeerde domeinnamen (bijv. 'example.com')
URL6ba7b811-9dad-11d1-80b4-00c04fd430c8URL's en URI's (bijv. 'https://example.com/resource')
OID6ba7b812-9dad-11d1-80b4-00c04fd430c8ISO-objectidentificatoren (bijv. '1.2.840.113556')
X.5006ba7b814-9dad-11d1-80b4-00c04fd430c8X.500 Distinguished Names (bijv. 'cn=John,dc=example,dc=com')

U kunt ook elke willekeurige UUID gebruiken als aangepaste namespace — bijvoorbeeld een UUID v4 die u eenmalig genereert en inbedt in uw toepassing als een constante. Dit stelt u in staat een privé-namespace te maken voor uw eigen naam-naar-UUID-toewijzingen.

UUID v3 vs UUID v5

UUID v3 en UUID v5 zijn structureel identiek — beide zijn deterministische, op naam gebaseerde UUIDs. Het enige verschil is de hash-functie:

UUID v3
  • Gebruikt MD5-hashing
  • 128-bit uitvoer (UUID-formaat)
  • Gedefinieerd in RFC 4122
  • MD5 is cryptografisch gebroken
  • Ondersteund door alle UUID-bibliotheken
UUID v5
  • Gebruikt SHA-1-hashing
  • 160-bit hash afgekapt tot 128 bits
  • Gedefinieerd in RFC 4122
  • SHA-1 is verouderd voor beveiligingsgebruik maar sterker dan MD5
  • Ondersteund door alle UUID-bibliotheken

Geef de voorkeur aan UUID v5 boven UUID v3 voor alle nieuwe ontwikkeling. De SHA-1-hash is sterker dan MD5, en het prestatieverschil is verwaarloosbaar. Gebruik UUID v3 alleen wanneer u UUIDs moet reproduceren van een systeem dat het al gebruikt.

Wanneer UUID v3 gebruiken

UUID v3 (en v5) zijn geschikt wanneer u een stabiele, reproduceerbare identificator nodig heeft afgeleid van een betekenisvolle naam — in plaats van een willekeurige ID die opgeslagen en opgezocht moet worden:

URL-canonicalisering
Genereer een deterministische UUID voor elke URL om te gebruiken als een compacte, vaste-lengte sleutel in een database of cache — zonder een toewijzingstabel op te slaan.
DNS-gebaseerde identificatoren
Wijs stabiele UUIDs toe aan hostnamen of domeinnamen die consistent blijven over deployments en databases heen.
Content-adressering
Maak reproduceerbare ID's voor contentitems geïdentificeerd door hun canonieke naam — artikelen, producten of configuratiesleutels.
Idempotente resource-aanmaak
Genereer dezelfde UUID voor dezelfde resourcenaam, zodat herhaalde aanmaakattempts van nature idempotent zijn zonder opzoeken.
Testfixtures
Produceer stabiele, voorspelbare UUIDs in testdata zodat testbeweringen niet hoeven te worden bijgewerkt wanneer tests opnieuw worden uitgevoerd.
Systeem-overschrijdende deduplicatie
Twee onafhankelijke systemen kunnen dezelfde UUID afleiden voor dezelfde naam zonder communicatie, waardoor deduplicatie mogelijk is zonder een gedeeld ID-register.

Determinisme begrijpen

Het determinisme van UUID v3 is zowel zijn grootste kracht als zijn belangrijkste beperking. Gegeven elke namespace-UUID en elke naam-string, is de uitvoer-UUID volledig vastgesteld — er is geen willekeurigheid bij betrokken. Dit betekent:

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

Levert altijd op: 9073926b-929f-31c2-abc9-fad77ae3e8eb

Als een aanvaller de namespace kent en de naam kan raden, kan hij de UUID van tevoren berekenen. UUID v3-waarden mogen nooit worden gebruikt als onvoorspelbare tokens, sessie-ID's of geheimen. Gebruik UUID v4 voor elke beveiligingsgevoelige identificator.

Codevoorbeelden

UUID v3 vereist een namespace-UUID en een naam-string. Gebruik het standaard uuid-pakket:

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)
}

Veelgestelde vragen

Zijn UUID v3 en UUID v5 uitwisselbaar?
Nee — ze produceren verschillende uitvoer voor dezelfde invoer omdat ze verschillende hash-functies gebruiken (MD5 vs SHA-1). Een UUID v3 en een UUID v5 gegenereerd uit dezelfde namespace + naam zijn verschillende UUIDs. Ze zijn niet uitwisselbaar, maar ze zijn functioneel equivalent in structuur en gebruiksscenario's.
Is UUID v3 botsingsbestendig?
Binnen een gegeven namespace zullen twee verschillende namen verschillende UUID v3-waarden produceren zolang MD5 geen botsing produceert voor die specifieke invoeren. MD5-botsingaanvallen bestaan, maar vereisen zorgvuldig geconstrueerde invoer — in de praktijk zullen van nature voorkomende namen (URL's, domeinnamen, product-ID's) niet botsen. Voor hogere zekerheid gebruik UUID v5.
Kan ik UUID v3 gebruiken als primaire sleutel in een database?
Ja, als u de afwegingen begrijpt. UUID v3 is deterministisch, dus dezelfde sleutel zal worden gegenereerd voor dezelfde naam — dit biedt natuurlijke idempotentie. UUID v3 is echter niet sorteerbaar op generatievolgorde, en indexfragmentatie geldt net als bij UUID v4. Voor tijdgeordende, sorteerbare primaire sleutels gebruik UUID v7.
Welke codering moet ik gebruiken voor de naam-invoer?
RFC 4122 specificeert dat de naam moet worden omgezet naar bytes met behulp van de canonieke vorm van de namespace. Voor de DNS-namespace gebruik de domeinnaam als een UTF-8-string zonder afsluitende punt. Voor de URL-namespace gebruik de volledige URL als een UTF-8-string. Gebruik altijd consistent dezelfde codering — verschillende coderingen van dezelfde logische naam zullen verschillende UUIDs produceren.
Verbergt UUID v3 de originele naam?
MD5 is een eenrichtingsfunctie — u kunt een UUID v3 niet omkeren om de originele naam te herstellen. Echter, als een aanvaller de namespace kent en een kleine verzameling mogelijke namen vermoedt, kan hij UUID v3-waarden voorberekenen voor elke kandidaat en vergelijken. Voor namen uit een kleine of voorspelbare ruimte biedt UUID v3 geen vertrouwelijkheid. Gebruik UUID v4 als u een ondoorzichtige, niet-raadbare identificator nodig heeft.