UUID v3 Üretici
MD5 kullanarak ad tabanlı deterministik UUID v3 oluşturur
Ad Alanı
6ba7b810-9dad-11d1-80b4-00c04fd430c8
Ad
Oluşturulan UUID v3
UUID v3 Nedir?
UUID v3, RFC 4122'de tanımlanan ad tabanlı UUID sürümüdür. Rastgele veri veya zaman damgası yerine UUID'yi iki girdiden deterministik olarak türetir: bir ad alanı UUID'si ve bir ad dizesi. MD5 kullanılarak karma değer oluşturulur.
UUID v3'ün temel özelliği determinizmdir: aynı ad alanı ve ad her zaman herhangi bir makinede, herhangi bir zamanda aynı UUID'yi üretir.
UUID v3, MD5 karma işlevini kullanır. MD5, güvenlik amaçlı kriptografik açıdan kırık kabul edildiğinden yeni geliştirmeler için genellikle UUID v5 (SHA-1 kullanan) tercih edilir.
Standart Ad Alanları
RFC 4122, dört önceden atanmış ad alanı UUID'si tanımlar. Standart ad alanı kullanmak birlikte çalışabilirliği sağlar:
| Ad Alanı | UUID | Kullanım Amacı |
|---|---|---|
| DNS | 6ba7b810-9dad-11d1-80b4-00c04fd430c8 | Tam nitelikli alan adları (ör. 'example.com') |
| URL | 6ba7b811-9dad-11d1-80b4-00c04fd430c8 | URL'ler ve URI'ler (ör. 'https://example.com/resource') |
| OID | 6ba7b812-9dad-11d1-80b4-00c04fd430c8 | ISO Nesne Tanımlayıcıları (ör. '1.2.840.113556') |
| X.500 | 6ba7b814-9dad-11d1-80b4-00c04fd430c8 | X.500 Ayırt Edici Adları (ör. 'cn=John,dc=example,dc=com') |
Herhangi bir UUID'yi özel ad alanı olarak da kullanabilirsiniz.
UUID v3 ile UUID v5 Karşılaştırması
UUID v3 ve UUID v5 yapısal olarak özdeştir — her ikisi de deterministik, ad tabanlı UUID'lerdir. Tek fark karma işlevidir:
- MD5 karma kullanır
- 128 bitlik çıktı (UUID boyutunda)
- RFC 4122'de tanımlandı
- MD5 kriptografik açıdan kırıktır
- Tüm UUID kitaplıkları tarafından desteklenir
- SHA-1 karma kullanır
- 160 bitlik karma 128 bite kısaltıldı
- RFC 4122'de tanımlandı
- SHA-1 güvenlik kullanımı için kullanımdan kaldırıldı ama MD5'ten güçlü
- Tüm UUID kitaplıkları tarafından desteklenir
Tüm yeni geliştirmeler için UUID v3 yerine UUID v5'i tercih edin. SHA-1 karması MD5'ten güçlüdür.
UUID v3 Ne Zaman Kullanılır
UUID v3 (ve v5), depolanıp aranması gereken rastgele bir ID yerine anlamlı bir addan türetilmiş kararlı, yeniden üretilebilir tanımlayıcıya ihtiyaç duyduğunuzda uygundur:
Determinizmi Anlamak
UUID v3'ün determinizmi hem en büyük güçlü yönü hem de en önemli kısıtlamasıdır.
Her zaman üretir: 9073926b-929f-31c2-abc9-fad77ae3e8eb
Bir saldırgan ad alanını biliyorsa ve adı tahmin edebiliyorsa UUID'yi önceden hesaplayabilir. UUID v3 değerleri asla tahmin edilemez token, oturum ID'si veya gizli dizi olarak kullanılmamalıdır.
Kod Örnekleri
UUID v3, bir ad alanı UUID'si ve ad dizesi gerektirir. Standart uuid paketini kullanın:
// 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)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)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)
}