Я хотел бы знать, как долго каждый алгоритм хеширования берет на себя определенную систему, учитывая разные длины набора данных.
На странице PHP.net для hash
есть пример кода в комментариях, который демонстрирует, как вы можете профилировать различные функции хеширования PHP.
Здесь записано время одного человека , а также примерный пример того, как вы можете повторить тест.
Я взломал этот скрипт. Я рекомендую играть со значением $ random_len. Различные значения приводят к некоторым интересным результатам.
<?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>
См. http://us.php.net/manual/en/function.microtime.php . В основном, что-то вроде этого:
$input = "blah"; $start = microtime(TRUE); for($i=0;$i<1000;$i++) sha1($input); $end = microtime(TRUE); print "Took ".($end-$start)." sec for 1000 sha1s."