Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP - uniqid(,true) versus uniqid()+mt_rand()

Ohne mehr Entropie zu verwenden, uniqid macht grundsätzlich folgendes (siehe Quelle von ). uniqid.c ):

$time = explode(' ', microtime(false));
return sprintf('%s%08x%05x', $prefix, $time[1], $time[0] * 1000000);

Es nimmt also im Grunde genommen die aktuelle Zeit in Mikrosekunden und wandelt sie in eine hexadezimale Darstellung um und hängt sie an das Präfix an. Dies liefert bereits eindeutige Werte.

Aber die Werte sind nicht ganz zufällig. Um mehr Zufallswerte zu erhalten, sollten Sie mehr Entropie hinzufügen, indem Sie den zweiten Parameter more_entropy setzen . In diesem Fall PHPs interner linearer Kongruenzgenerator php_combined_lcg (siehe Quelle von lgc.c ) wird verwendet, um eine Pseudo-Zufallszahl zu generieren, die am Ende angehängt wird und etwa 30 Bit zusätzliche Entropie hinzufügt, um sie zufälliger zu machen.