为什么“hash('md5','string')”比“md5('string')”更快?

时间:2013-03-19 12:51:06

标签: php hash md5

http://www.php.net/manual/en/function.hash.php#73792上,它指出一个测试,显示md5()函数比等效hash()函数慢约3倍。

有什么可以解释这种差异? md5()函数的功能有何不同和/或更多?

2 个答案:

答案 0 :(得分:5)

是100%正确 ...即使您仍在使用PHP早期版本的PHP,例如 在PHP 5.1.2的最新版本PHP 5.2.2中,PHPmd5它们是相同的,set_time_limit(0); echo "<pre>"; function m1($total) { for($i = 0; $i < $total; $i ++) hash('md5', 'string'); } function m2($total) { for($i = 0; $i < $total; $i ++) md5('string'); } function m3($total) { for($i = 0; $i < $total; $i ++) hash('sha1', 'string'); } function m4($total) { for($i = 0; $i < $total; $i ++) sha1('string'); } function m5($total) { for($i = 0; $i < $total; $i ++) hash('md5', $i); } function m6($total) { for($i = 0; $i < $total; $i ++) md5($i); } function m7($total) { for($i = 0; $i < $total; $i ++) hash('sha1', $i); } function m8($total) { for($i = 0; $i < $total; $i ++) sha1($i); } $result = array( 'm1' => 0, 'm2' => 0, 'm3' => 0, 'm4' => 0, 'm5' => 0, 'm6' => 0, 'm7' => 0, 'm8' => 0 ); $total = 10000; for($i = 0; $i < 100; ++ $i) { foreach ( array_keys($result) as $key ) { $alpha = microtime(true); $key($total); $result[$key] += microtime(true) - $alpha; } } echo '<pre>'; echo "Single Run\n"; print_r($result); echo '</pre>'; 在某些版本中运行得稍快一些

Here is a simple test in most PHP version

你还需要注意基准测试方法是错误的,改变位置会影响结果...这是如何获得更好的结果。

Single Run
Array
(
    [m1] => 0.58715152740479                 <--- hash/md5/string
    [m2] => 0.41520881652832                 <--- md5/string
    [m3] => 0.79592990875244                 <--- hash/sha1/string
    [m4] => 0.61766123771667                 <--- sha1/string
    [m5] => 0.67594528198242                 <--- hash/md5/$i
    [m6] => 0.51757597923279                 <--- md5/$i
    [m7] => 0.90692067146301                 <--- hash/sha1/$i
    [m8] => 0.74792814254761                 <--- sha1/$i

)

输出

{{1}}

Live Test

答案 1 :(得分:2)

有同样的!!!你需要用大字符串测试它来检查它,我使用这段代码:

<?php

$s="";
for ($i=0;$i<1000000;$i++)
$s.=$i;
$time=microtime(1);
   hash('md5', $s);
echo microtime(1)-$time,': hash/md5<br>';

$time=microtime(1);

 md5($s);
echo microtime(1)-$time,': md5<br>';

$time=microtime(1);
hash('sha1', $s);
echo microtime(1)-$time,': hash/sha1<br>';

$time=microtime(1);
sha1($s);
echo microtime(1)-$time,': sha1<br>';
?>

这是我的结果:

0.015523910522461: hash/md5
0.01521897315979: md5
0.020196914672852: hash/sha1
0.020323038101196: sha1

非常相似!!!