Al fine di generare un token 32 caratteri per l'accesso alla nostra API Al momento stiamo utilizzando:Generazione crittograficamente sicuro gettoni
$token = md5(uniqid(mt_rand(), true));
Ho letto che questo metodo non è crittograficamente sicuro in quanto si basa su l'orologio di sistema, e che openssl_random_pseudo_bytes
sarebbe una soluzione migliore in quanto sarebbe più difficile da prevedere.
Se questo è il caso, quale sarebbe il codice equivalente?
Presumo che qualcosa di simile, ma non so se questo è giusto ...
$token = md5(openssl_random_pseudo_bytes(32));
anche che lunghezza ha un senso che io debba passare alla funzione?
Perché md5 però? Basta convertire iltestream in esadecimale: si ottengono 32 byte di ritorno da openssl_random_pseudo_bytes(), il rendering di ciascuno di quei byte come valore esadecimale con bin2hex() come mostrato nel [documento PHP] (http://www.php.net/ manuale/en/function.openssl-random-pseudo-bytes.php) esempi –
Voglio solo 32 caratteri? Come potrei farlo? – fire
'md5()' genera una stringa di 32 caratteri, ma contiene solo un valore di 128 bit di dati. 'openssl_random_pseudo_bytes()' restituisce dati binari veri, quindi ha 32 * 8 = 256 bit di casualità. Riempiendo la tua stringa casuale da 32-byte attraverso md5, stai effettivamente riducendo la sua unicità di una quantità enorme. –