gen_md5() x 8000 = 0.0229 seconds - 122.5% of fastest
  Sample output: f2c6d1a5b1af1a455234610370d3d94b (32 chars)
gen_sha1() x 8000 = 0.0248 seconds - 132.6% of fastest
  Sample output: eeb60c048329923faac5a49478b33f7921f502d6 (40 chars)
gen_sha256() x 8000 = 0.0306 seconds - 163.6% of fastest
  Sample output: 9bdd71f60d8fefca371330b9399bcbc901e259e4b7737e435e6a850a96915c8d (64 chars)
gen_sha512() x 8000 = 0.0333 seconds - 178.1% of fastest
  Sample output: 9c1978da7c152275780f7c6f7f6d1f9009ee1b986df4d9b9179e640f6500f8c116912738e0b8ef2ed1a2c1c2d2651e97fce668f035d500e80a546de25d4a7f52 (128 chars)
gen_uniqid() x 8000 = 0.7500 seconds - 4010.7% of fastest
  Sample output: 5846aadf0a961 (13 chars)
gen_uniqid2() x 8000 = 0.0187 seconds - 100.0% of fastest
  Sample output: 5846aadf0f2778.92846902 (23 chars)
gen_uuid() x 8000 = 0.0287 seconds - 153.5% of fastest
  Sample output: 8fad19f8-b53b-443f-8499-f67805078993 (36 chars)
openssl_random() x 8000 = 0.0508 seconds - 271.7% of fastest
  Sample output: ff64c1d4d3ba36960963be5700f4e7158a8e6b010979134d20e5ee6a59949c48 (64 chars)
openssl_random_sha256() x 8000 = 0.0511 seconds - 273.3% of fastest
  Sample output: 1f2d4a8ef04868151c1c5c1969bcccfaea69965571f8a1e6b5789f35bb1ffb03 (64 chars)
get_nonce() x 8000 = 0.0274 seconds - 146.5% of fastest
  Sample output: 6bd474c39f7fcdae (16 chars)
get_nonce_ssl() x 8000 = 0.0205 seconds - 109.6% of fastest
  Sample output: 787a9857feefff76 (16 chars)

<?PHP

// Number of times to loop
$loop 8000;
// Functions to benchmark
$funcs = array('gen_md5','gen_sha1','gen_sha256','gen_sha512','gen_uniqid','gen_uniqid2','gen_uuid','openssl_random','openssl_random_sha256','get_nonce','get_nonce_ssl');

// Loop through each function and benchmark it
foreach ($funcs as $i) {
    
$time bench($i,$loop);
    
$out  call_user_func($i);
    
$len  strlen($out);

    
$data[$i] = array('time' => $time'sample' => $out);
}

$min 9999999;
$max 0;

foreach (
$data as $hash => $i) {
    
$time $i['time'];

    if (
$time $min) {
        
$min      $time;
        
$min_hash $hash;
    } elseif (
$time $max) {
        
$max      $time;
        
$max_hash $hash;
    }
}

foreach (
$data as $hash => $i) {
    
$time   $i['time'];
    
$sample $i['sample'];
    
$len    strlen($sample);
    
$per    sprintf("%0.1f",($time $min) * 100);

    if (
$hash === $max_hash) {
        
$color '#FFDBDD';
    } elseif (
$hash === $min_hash) {
        
$color '#DBFFD1';
    } else {
        
$color 'white';
    }

    print 
"<div style=\"background-color: $color; margin-bottom: 0.7em;\">\n";
    print 
"<div><b>$hash()</b> x $loop = $time seconds - $per% of fastest</div>\n";
    print 
"<div>&nbsp;&nbsp;Sample output: <code>$sample</code> ($len chars)</div>\n";
    print 
"</div>\n\n";
}

print 
"<br />\n";

/////////////////////////////////////////////////////////////////////////////

function gen_md5() {
    return 
md5(microtime(1));
}

function 
gen_sha1() {
    return 
sha1(microtime(1));
}

function 
gen_sha256() {
    
#return hash('sha256',openssl_random_pseudo_bytes(16));

    
return hash('sha256',microtime(1));
}

function 
gen_sha512() {
    return 
hash('sha512',microtime(1));
}

function 
gen_uniqid() {
    return 
uniqid('');
}

function 
gen_uniqid2() {
    return 
uniqid('',true);
}

// From PHP.net in the uniqid() comments
function gen_uuid() {
    return 
sprintf'%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        
// 32 bits for "time_low"
        
mt_rand00xffff ), mt_rand00xffff ),

        
// 16 bits for "time_mid"
        
mt_rand00xffff ),

        
// 16 bits for "time_hi_and_version",
        // four most significant bits holds version number 4
        
mt_rand00x0fff ) | 0x4000,

        
// 16 bits, 8 bits for "clk_seq_hi_res",
        // 8 bits for "clk_seq_low",
        // two most significant bits holds zero and one for variant DCE1.1
        
mt_rand00x3fff ) | 0x8000,

        
// 48 bits for "node"
        
mt_rand00xffff ), mt_rand00xffff ), mt_rand00xffff )
    );
}

function 
openssl_random($bytes 32) {
    
$ret openssl_random_pseudo_bytes($bytes);
    
$ret bin2hex($ret);

    return 
$ret;
}

function 
openssl_random_sha256($bytes 16) {
    
$ret openssl_random_pseudo_bytes($bytes);
    
$ret hash('sha256',$ret);

    return 
$ret;
}

// Get a cryptographic nonce
function get_nonce($len 16) {
    
// Some random data
    
$str mt_rand() . microtime();

    
// Hash and return only X chars
    
$ret hash('sha256',$str);
    
$ret substr($ret,0,$len);

    return 
$ret;
}

// Get a cryptographic nonce
function get_nonce_ssl($len 8,$raw false) {
    
$bytes openssl_random_pseudo_bytes($len);

    if (
$raw) {
        
$ret $bytes;
    } else {
        
$ret bin2hex($bytes);
    }

    return 
$ret;
}

////////////////////////////////////////////

function bench($func,$times) {
    
$start microtime(1);

    for (
$i 0$i $times$i++) {
        
call_user_func($func);
    }

    
$end microtime(1);
    
$ret sprintf("%0.4f",$end $start);

    return 
$ret;
}

highlight_file(__FILE__);

?>