UUID v3 uitgelegd
UUID v3 is een op naam gebaseerde versie. De UUID van de naamruimte en de naam worden aaneengeschakeld, met MD5 gehasht en het resultaat wordt tot een UUID van 128 bits gemaakt. Er zit dus geen willekeur in.
Omdat de waarde uit de invoer volgt, krijg je op elk systeem hetzelfde resultaat. MD5 is alleen niet cryptografisch veilig, dus voor nieuwe ontwerpen is v5 met SHA-1 de betere keuze.
Hoe het werkt
- Stel in hoeveel UUID's je nodig hebt.
- Kies eventueel hoofdletters, koppeltekens en accolades.
- Druk op UUID genereren om de deterministische v3-waarde(n) te berekenen.
Waarvoor je het gebruikt
- Een stabiele identificatie voor sleutels die een extern systeem bepaalt, zoals een domeinnaam of e-mailadres.
- Situaties waarin meerdere services uit dezelfde invoer dezelfde UUID moeten berekenen.
- Bestaande specificaties die MD5 voorschrijven.
Structuur
De uitkomst van de MD5-hash wordt in de UUID geplaatst, waarbij het dertiende hexadecimale teken het versienummer (3) is en het zeventiende het variantnummer. De overige 122 bits komen allemaal uit de hash.
Waar UUID v3 past
| Optie | Wanneer gebruiken |
|---|---|
v3 | Op MD5 gebaseerd, alleen als een specificatie dat eist |
v5 | Op SHA-1 gebaseerd en dus geschikter voor hetzelfde doel |
v4 | Als je een random waarde wilt die losstaat van de invoer |
Overzicht van alle UUID-versies
| Versie | Sorteerbaar | Herkomst van de bits | Waarvoor het past |
|---|---|---|---|
| v1 | Nee | Tijdstempel + MAC-adres | Bestaande systemen die v1 verwachten |
| v3 | Nee | MD5-hash van de naam | Deterministische ID's als MD5 verplicht is |
| v4 | Nee | 122 random bits | Vrijwel elke gewone unieke identificatie |
| v5 | Nee | SHA-1-hash van de naam | Als dezelfde naam altijd dezelfde ID moet geven |
| v6 | Ja | Herschikte tijdstempel | Als je zowel randomheid als sortering wilt |
| v7 | Ja | Unix-tijd in milliseconden | Primaire sleutels en gebeurtenis-ID's |
| v8 | Nee | Zelfgekozen bitindeling | Eigen formaten en experimenten |
Alle zeven versies zijn 128 bits en gebruiken dezelfde notatie 8-4-4-4-12. Het verschil zit alleen in wat elk bit voorstelt.
Codevoorbeelden
javascript
// Je hebt een MD5-implementatie nodig
// bijvoorbeeld js-md5 en dan zelf samenstellen
const id = uuidv3('example.com', NAMESPACE_DNS);
python
import uuid
id = str(uuid.uuid3(uuid.NAMESPACE_DNS, 'example.com'))
java
UUID id = UUID.nameUUIDFromBytes("example.com".getBytes());
csharp
// .NET heeft geen generator voor v3
sql
-- Meestal in de applicatie berekend en daarna opgeslagen
Veelgestelde vragen
Is het normaal dat de uitvoer hetzelfde blijft?
Ja. Een v3 volgt uit de invoer en is dus niet willekeurig. Heb je elke keer een andere waarde nodig, gebruik dan v4.
Moet ik v3 of v5 gebruiken?
Voor nieuw werk v5. De structuur is gelijk en alleen de hashfunctie verschilt, maar voor MD5 zijn botsingsaanvallen bekend.
Wat is een naamruimte?
Een vaste UUID die je vóór de naam plakt voordat je hasht. RFC 4122 definieert er vier: DNS, URL, OID en X.500. Kies degene die bij je doel past.