UUID v5 uitgelegd
UUID v5 heeft dezelfde structuur als v3 en verschilt alleen in de hashfunctie: SHA-1 in plaats van MD5. Naamruimte en naam worden aaneengeschakeld, gehasht en tot 128 bits gemaakt, dus dezelfde invoer geeft altijd dezelfde UUID.
Omdat SHA-1 beter bestand is tegen botsingen dan MD5, wijst RFC 9562 voor op naam gebaseerde identificaties v5 aan als de voorkeursvariant.
Hoe het werkt
- Stel in hoeveel UUID's je nodig hebt.
- Kies eventueel hoofdletters, koppeltekens en accolades.
- Druk op UUID genereren om de deterministische v5-waarde(n) te berekenen.
Waarvoor je het gebruikt
- Een stabiele ID voor sleutels die van buiten komen, zoals een domeinnaam, URL of e-mailadres.
- Situaties waarin meerdere services uit dezelfde invoer dezelfde UUID berekenen.
- Datamigraties waarbij bestaande namen behouden blijven en er toch een identificatie bij moet.
Structuur
De eerste 128 bits van de SHA-1-hash worden in de UUID geplaatst; het dertiende hexadecimale teken is het versienummer (5) en het zeventiende het variantnummer. De overige 122 bits komen uit de hash.
Waar UUID v5 past
| Optie | Wanneer gebruiken |
|---|---|
v5 | De aanbevolen versie voor identificaties uit namen |
v3 | Zelfde structuur, maar met MD5 en dus geen reden om het te kiezen |
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 SHA-1-implementatie nodig
// bijvoorbeeld js-sha1 en dan zelf samenstellen
const id = uuidv5('example.com', NAMESPACE_DNS);
python
import uuid
id = str(uuid.uuid5(uuid.NAMESPACE_DNS, 'example.com'))
java
// Zonder bibliotheek moet je dit zelf implementeren
csharp
// .NET heeft geen generator voor v5
sql
-- Meestal in de applicatie berekend en daarna opgeslagen
Veelgestelde vragen
Wat is het verschil tussen v5 en v3?
Alleen de hashfunctie. v5 gebruikt SHA-1 en v3 gebruikt MD5. De structuur en de manier van werken zijn hetzelfde.
Is v5 veilig, aangezien het SHA-1 gebruikt?
Voor het maken van identificaties wel. De botsingsproblemen van SHA-1 spelen bij ondertekening en integriteitscontrole; v5 maakt een waarde deterministisch en beoogt geen beveiliging.
Wat gebeurt er als ik de naamruimte wijzig?
Dan krijg je een heel andere UUID. De naamruimte hoort bij de invoer van de hash, dus kies een combinatie en houd die vast.