Choć top odpowiedź jest praktycznie poprawne, to nie jest teoretycznie poprawne.
Twoje pytanie również nie ma idealnej odpowiedzi.
Bezpieczeństwo opiera się na bezstronnej, nieprzewidywalnej, prawdziwej losowości. Ale coś, co jest naprawdę przypadkowe, może się powtarzać, albo nie będzie przypadkowe. Milionowa kostka mogła wylądować na tej samej liczbie milion razy z rzędu, prawdopodobieństwo tego zdarzenia jest bardzo małe.
Siłą UUIDv4 jest to, że prawdopodobieństwo uzyskania tego samego identyfikatora dwukrotnie (kolizja) jest astronomicznie małe, "wybierz ten sam atom z galaktyki dwa razy" w rodzaju małego.
Każda próba dodania niepowtarzalności zmniejszy w rzeczywistości poziom bezpieczeństwa. Można dodać mikrosekundowy sygnaturę czasową lub wartość auto-inkrementującą oraz dokładność przestrzenną z dokładnością do milimetra, aby zagwarantować wyjątkowość. Ale dodajesz informacje o tym, gdzie i w jaki sposób iw jakiej kolejności utworzono identyfikator ...
Ponownie, ze względów praktycznych, można bezpiecznie używać UUIDv4 jako bezpiecznego i unikalnego identyfikatora.
Zdaj sobie również sprawę, że md5
, sha1
, uniqid
itp. Nie są doskonałe same w sobie, a łączenie ich w losowy sposób niekoniecznie zmniejsza kolizje lub zwiększa bezpieczeństwo. Funkcje skrótu są w najlepszym razie tak unikalne jak to, z czym się mieszasz, i zazwyczaj zmniejszają wyjątkowość.
Odpowiedź zawsze dotyczy losowości i długości.
Co by to osiągnąć? – Cybergibbons
MD5 nie jest bezpiecznym algorytmem mieszającym. – starbeamrainbowlabs