Prima di tutto, una funzione di hash ha un input : hai hash qualcosa . GUID (in realtà UUID ) non ha alcun input. Per generare "identificatori univoci" con una funzione di hash, non utilizzare semplicemente una funzione di hash; devi definire cosa stai effettivamente facendo.
Esistono diversi metodi standard per generare UUID; tutti questi metodi mirano a raggiungere "l'unicità" degli identificatori generati. Il metodo 3 utilizza la funzione hash MD5: si genera l'UUID eseguendo il hashing di alcuni dati che sono già intrinsecamente unici in tutto il mondo (ad esempio un URL), ma più lunghi dei 16 byte di un UUID. Questo metodo assomiglia molto a quello che suggerisci, tranne che definisce chiaramente cosa è l'hash (o almeno, afferma in parole semplici che quando si esegue l'hashing, si hash qualcosa e il tuo UUID non sarà più unico di cosa hai hash). Il metodo 5 è come il metodo 3, ma con SHA-1 anziché MD5 (l'output è troncato a 128 bit).
Altri metodi usano elementi fisici o di configurazione della macchina locale (ad esempio indirizzo MAC e ora corrente per il metodo 1). La maggior parte dei metodi sono "cooperativi": garantiscono l'univocità ma possono essere previsti nuovi valori UUID. Per molti protocolli relativi alla sicurezza, quando è necessario un ID univoco, è effettivamente necessario un ID che non colliderà con l'ID precedente (o lo farà solo con una probabilità trascurabile) e non possono essere previsti dagli autori di attacchi; per questo, hai bisogno del "metodo 4": l'UUID a 128 bit contiene 122 bit casuali, generati da un PRNG crittograficamente strong . Questo metodo fornirà identificatori "univoci" ed è migliore di qualsiasi costruzione fatta in casa.