Załóżmy, że w aplikacji identyfikatory przyznawane wszystkim obiektom generowane są przez następujący kod:
def random_id_generator(): start_timestamp = 1356994800 while True: current_timestamp = int(time.time()) timestamp = (current_timestamp - start_timestamp) / 60 r = struct.unpack("B", os.urandom(1))[0] << 24 yield struct.pack("L",(r ^ timestamp)).encode("hex")
Założenie jest takie, że przyznawane identyfikatory nie powinny być sekwencyjne, tak by enumeracja obiektów z użyciem bezpośredniego użycia identyfikatora była nieefektywna. Przewiduje się generowanie nie więcej niż jednego identyfikatora na sekundę. Identyfikatory muszą pozostać unikalne przez okres 10 lat.
Pytanie - ile widzicie błędów w tym podejściu?
2. Przez 60 sek. timestamp ma tą samą wartość (ryzyko kolizji)
3. Wyciek informacji (czas wygenerowania identyfikatora)