您当前的位置: 首页 > 网站编程 > PHP教程 > PHP中MD5函数效率

PHP中MD5函数效率

作者:xiaoxiao 来源:未知 发布时间: 2013-12-02 13:25 点击:
起因 在校内APP发开论坛看到: 姓名大作战由于每次战斗都需要经过2次md5计算,访问用户一多就经常把服务器cpu占用搞到100%,空间商找我麻烦了,昨晚把所在虚拟目录封闭了已经。现在临时采用了将计算过的用户的md5存到数据库中的方法,但是这样基本每次战斗还是会经过一

PHP中MD5函数效率

  起因
  在校内APP发开论坛看到:
  姓名大作战由于每次战斗都需要经过2次md5计算,访问用户一多就经常把服务器cpu占用搞到100%,空间商找我麻烦了,昨晚把所在虚拟目录封闭了已经。现在临时采用了将计算过的用户的md5存到数据库中的方法,但是这样基本每次战斗还是会经过一次的md5计算(因为所选择的对手基本都应该是没有对战过的,之前没有计算过他的md5值),谁能提供点更好的方法。
  
  md5函数与字符串长度
  然后就对PHP下的md5系列函数进行了研究,发现在网上的一些信息其实是有细节问题的。比如“中md5()函数的执行时间会随着字符串的长度增加而直线变慢”。虽然这个结论大致是正确的,但是他演示程序还是有细节问题,因为其中有不少的时间是被随机字符串给占用了。
  
  经过我的测试,PHP中md5函数确实会随着被加密字符串长度的增加而函数时间正比增加,在PHP的实际应用中,对小于100位的md5加密不用担心其效率和性能。
  
  hash('md5', 'xxx')与md5('xxx')
  如果是PHP的话,在所需加密的字符串位数较少时,hash('md5', 'xxx')会比md5('xxx')效率高上2-8倍左右。当位数增加的时候,比如500位以上时,hash('md5', 'xxx')与md5('xxx')时间基本相差无几,可以放心使用。
  
  测试代码
  Test_hash.php
  $t1 = gettimeofday();
  
  for ($i = 0; $i < 10000; $i++){
          $x = hash('md5', 'PHP中MD5效率的白话,网址http://www.yhzhan,com');
  }
  
  $t2 = gettimeofday();
  
  echo ($t2['sec'] - $t1['sec']) * 1000 + ($t2['usec'] - $t1['usec']) / 1000 . "\n";
  Test_md5.php
  
  $t1 = gettimeofday();
  
  for ($i = 0; $i < 10000; $i++){
          $x = md5('PHP中MD5效率的白话,网址http://www.yhzhan,com');
  }
  
  $t2 = gettimeofday();
  
  echo ($t2['sec'] - $t1['sec']) * 1000 + ($t2['usec'] - $t1['usec']) / 1000 . "\n";
  结论
  1.md5函数执行时间会随着字符串的长度增加而直线变慢。
  2.在位数较小的情况下,hash('md5', 'xxx')与md5('xxx')效率高,但是此时单次md5操作所需时间很微小,可以忽略不计,使用md5函数。
  3.当位数较多的情况下,比如500位以上时,hash('md5', 'xxx')与md5('xxx')时间基本相差无几,可以放心使用md5函数。
  4.总的来说,直接使用md5('xxx')忽略hash('md5', 'xxx')是可取的。
  
  PS:本文真无聊。

分享到:
本文"PHP中MD5函数效率"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(1)
100%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4