mirror of
https://github.com/php/php-src.git
synced 2025-08-20 01:14:28 +02:00
parent
0b596f81b8
commit
48f1a17886
1 changed files with 19 additions and 2 deletions
|
|
@ -35,9 +35,11 @@
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "php_lcg.h"
|
#include "php_random.h"
|
||||||
#include "uniqid.h"
|
#include "uniqid.h"
|
||||||
|
|
||||||
|
#define PHP_UNIQID_ENTROPY_LEN 10
|
||||||
|
|
||||||
/* {{{ proto string uniqid([string prefix [, bool more_entropy]])
|
/* {{{ proto string uniqid([string prefix [, bool more_entropy]])
|
||||||
Generates a unique ID */
|
Generates a unique ID */
|
||||||
#ifdef HAVE_GETTIMEOFDAY
|
#ifdef HAVE_GETTIMEOFDAY
|
||||||
|
|
@ -77,7 +79,22 @@ PHP_FUNCTION(uniqid)
|
||||||
* digits for usecs.
|
* digits for usecs.
|
||||||
*/
|
*/
|
||||||
if (more_entropy) {
|
if (more_entropy) {
|
||||||
uniqid = strpprintf(0, "%s%08x%05x%.8F", prefix, sec, usec, php_combined_lcg() * 10);
|
int i;
|
||||||
|
unsigned char c, entropy[PHP_UNIQID_ENTROPY_LEN+1];
|
||||||
|
|
||||||
|
for(i = 0; i < PHP_UNIQID_ENTROPY_LEN;) {
|
||||||
|
php_random_bytes_throw(&c, sizeof(c));
|
||||||
|
/* Avoid modulo bias */
|
||||||
|
if (c > 249) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
entropy[i] = c % 10 + '0';
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
/* Set . for compatibility */
|
||||||
|
entropy[1] = '.';
|
||||||
|
entropy[PHP_UNIQID_ENTROPY_LEN] = '\0';
|
||||||
|
uniqid = strpprintf(0, "%s%08x%05x%s", prefix, sec, usec, entropy);
|
||||||
} else {
|
} else {
|
||||||
uniqid = strpprintf(0, "%s%08x%05x", prefix, sec, usec);
|
uniqid = strpprintf(0, "%s%08x%05x", prefix, sec, usec);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue