I'd like to know how long each hashing algorithm takes on a particular system given different dataset lengths.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
The PHP.net page for hash
has some sample code in the comments that demonstrates how you can profile the various PHP hashing functions.
Here is one person's recorded times, along with some sample code on how you can replicate the test.
回答2:
I whipped up this script. I recommend playing with the $random_len value. Differing values produces some interesting results.
<?php
$random_len = 100; /* bytes */
$time_begin = microtime(true);
$table_html = '';
$algos = hash_algos();
$fh = @fopen('/dev/urandom', 'rb');
$random = fread( $fh, $random_len );
$time_rand = microtime(true) - $time_begin;
foreach ($algos as $algo) {
$begin = microtime(true);
$hash = hash($algo, $random);
$end = microtime(true) - $begin;
$table_html .= '<tr><td>' . $algo . '</td><td>' . $end . '</td><td>' . $hash . '</td></tr>';
}
$time_end = microtime(true) - $time_begin;
?>
<html>
<style>body{font-family:monospace}td{white-space:nowrap}</style>
<h1>PHP hashing algorithm execution time</h1>
<p>Random data length: <?php echo $random_len; ?> bytes</p>
<p>Random data elapsed time: <?php echo $time_rand; ?> seconds</p>
<p>Total elapsed time: <?php echo $time_end; ?> seconds</p>
<table border=1>
<thead><tr><th>Algorithm</th><th>Execution Time (s)</th><th>Hashed Output</th></tr></thead>
<tbody>
<?php echo $table_html; ?>
</tbody>
</table>
</html>
回答3:
See http://us.php.net/manual/en/function.microtime.php. Basically, something like this:
$input = "blah";
$start = microtime(TRUE);
for($i=0;$i<1000;$i++)
sha1($input);
$end = microtime(TRUE);
print "Took ".($end-$start)." sec for 1000 sha1s."