Anche se la risposta è praticamente superiore corretta, non è teoricamente corretto.
La tua domanda non ha una risposta perfetta neanche.
La sicurezza si basa su casualità imparziale, imprevedibile, vera. Ma qualcosa che è veramente casuale può ripetere sempre o non sarebbe casuale. Un dado a milioni di lati potrebbe atterrare sullo stesso numero un milione di volte di fila, la probabilità che ciò accada è solo molto piccola.
La forza di UUIDv4 è che la probabilità di ottenere lo stesso ID due volte (collisione) è astronomicamente piccola, lo "scegliere lo stesso atomo da una galassia due volte" di tipo piccolo.
Qualsiasi tentativo di aggiungere unicità ridurrà di fatto la sicurezza. È possibile aggiungere un timestamp di microsecondi o un valore di auto-incremento e una coordinata spaziale di precisione millimetrica per garantire l'unicità. Ma poi aggiungi informazioni su dove e come e in quale ordine è stato creato l'ID ...
Ancora una volta, per tutti gli scopi pratici, è sicuro utilizzare UUIDv4 come identificatore univoco e sicuro.
Realizza anche che md5
, sha1
, uniqid
, ecc. Non sono perfetti da soli e unirli in modo casuale non diminuisce necessariamente la collisione né aumenta la sicurezza. Le funzioni di hashing sono nel migliore dei casi uniche come la cosa che stai tagliando, e di solito diminuiscono l'unicità.
La risposta è sempre nella casualità più la lunghezza.
Cosa otterrebbe? – Cybergibbons
MD5 non è un algoritmo di hash sicuro. – starbeamrainbowlabs