PHP使用hash_algos函数计算哈希值,之间的性能排序
PHP从5.1.2版本以上开始支持hash_algos函数,看这个名字就知道了,algos在英文中也表示算法的意思,hash_algos就是哈希算法,收集了一些常用的哈希算法,从5.1.2开始不同版本的PHP,支持的算法也都略有不同。
在这里,我写一段函数,可以看到我这边版本PHP所支持的所有哈希算法,并计算出他们的性能对比。
<?php
set_time_limit(300);
define('CNT', 50000);
$algos = hash_algos();
foreach($algos as $algo) {
$st = microtime();
for($i = 0; $i < CNT; $i++) {
hash($algo, microtime().$i);
}
$et = microtime();
list($ss, $si) = explode(' ', $st);
list($es, $ei) = explode(' ', $et);
$time[$algo] = $ei + $es - $si - $ss;
$time[$algo] .= " [sample:" . hash($algo, "HELLO WORLD") . "]";
}
asort($time, SORT_NUMERIC);
echo "<table>";
foreach($time as $key=>$value){
echo "<tr><td>$key</td><td>$value</td></tr>";
}
echo "</table>";
得到的结果如下:
fnv164 | 0.37478698735046 [sample:eaab5a330ee5b36f] |
md4 | 0.3985438946991 [sample:c85e5fdf3a18840f9041ac70f241deb0] |
crc32b | 0.41961007745361 [sample:87e5865b] |
fnv132 | 0.42863700695801 [sample:4240512f] |
tiger160,3 | 0.43971493786621 [sample:5ffd501e367bed4d8e103761f66fad075ff4af41] |
adler32 | 0.44000594578552 [sample:128b031d] |
joaat | 0.46947299908447 [sample:0b1cc760] |
ripemd128 | 0.49671197273254 [sample:34f326051d6c45d698add89721159ce4] |
sha224 | 0.51215290837097 [sample:906bbee30415aab29f8309b829b521bb4275de9a302b37480ab129e9] |
md5 | 0.52081801637268 [sample:361fadf1c712e812d198c4cab5712a79] |
sha1 | 0.53381191786194 [sample:4b68507f1746b0e5f3efe99b8ef42afef79da017] |
sha256 | 0.54046505882263 [sample:787ec76dcafd20c1908eb0936a12f91edd105ab5cd7ecc2b1ae2032648345dff] |
tiger128,3 | 0.54758100090027 [sample:5ffd501e367bed4d8e103761f66fad07] |
ripemd160 | 0.5674130983429 [sample:3219b86078ed4b3da3d7cf681144ab933c0938b2] |
crc32 | 0.58168091377258 [sample:299ffb96] |
haval128,3 | 0.59623603713989 [sample:10b8533d416be012f54f5bf090635f2a] |
ripemd256 | 0.598747929245 [sample:281921c018530c2c00681cb9f7970368888a900e79160ed72bd578704fe1eef5] |
haval256,3 | 0.60667002838135 [sample:1534f6bfda22092180e3b737616f1e9b8f91508ead0199bb831d3a2ba57b621d] |
ripemd320 | 0.63686393048096 [sample:89e3861212449bbd2577a890a02be389b46afef606c4095302b182f7b88ab1a5b0e838095dc3a80e] |
haval192,3 | 0.65839607575989 [sample:cfaf464019fc31f8e3346816ac195dc44314ee5061d47f81] |
haval160,3 | 0.75110392315674 [sample:c937a75c444ce72fc7e0f216ee4fd66067f7c85d] |
whirlpool | 0.75960894284058 [sample:153800a4da7dab37cf8d985f38edb51e34aa1c38b10db2c66a6727b249198df07ca0ecdd008bf2b3d3e5c6fddcc5e81b67ef5f090042941a9dcf8a6eabd6a36c] |
haval192,4 | 0.7767040065155 [sample:f231f85b193f40310bd063723d6645d9315729fc83daa729] |
haval224,3 | 0.78067902493286 [sample:a3ea3ea3b3f39f7417c75132e0a49ef8d06e4af1bfbe9fb6a448f72b] |
tiger192,3 | 0.78198196318054 [sample:5ffd501e367bed4d8e103761f66fad075ff4af41b5b9b31e] |
sha512 | 0.79405710838318 [sample:13d6c73ac8cceeff9ff6b0ba2ce19c5fc47ac21f9fd403c151fe88e0fd39f4223c29bc9bded59e1e3f272fd969fd6e2e6e35be35072e742c4b36fec48feb87df] |
sha384 | 0.82325292324829 [sample:d3e23b4f16ea11c71aba0d23ba04a5625482a33bdcc69e63e2b86122470d22cf906bdbbcb204e73ec1338c8508bb2e2a] |
haval256,4 | 0.83586111834717 [sample:ca671b39d8bf0bbb3d24a6883a4b907cd9413591d69e8b5c775dd6a2168570f0] |
haval128,4 | 0.84537810420227 [sample:fa039d416e0ebb1a8e4d2e09e1187956] |
tiger160,4 | 0.85183900819397 [sample:10f15bbde5f13452c365c54d1623ba99b0c052be] |
haval224,5 | 0.8582429559021 [sample:0ad3fd38c1fdaa22c425af43ba805893ae8b1daf7b2e8b2c1910821a] |
haval160,4 | 0.85876092556763 [sample:85937b88a871dc814e70b9fb185ea9c6c0f698e5] |
haval256,5 | 0.91796088124084 [sample:90c751cd8f632217af98f8d72e9da4123ed7221c6091fa877e1a158264cba3a6] |
haval192,5 | 0.94244197169495 [sample:f64e4497f83c6a91ec5dcc0e2c074593b5ee37898304153d] |
tiger192,4 | 0.95719099984741 [sample:10f15bbde5f13452c365c54d1623ba99b0c052be228b4e5a] |
haval160,5 | 1.020770897995 [sample:c091f42b8f48de9c6a9cbaecc2f2962b74d882f8] |
haval224,4 | 1.0293329506226 [sample:bb68e9358e71067cd20db808bfeb69575772ee4e8c11b51431672fd4] |
haval128,5 | 1.0518960091553 [sample:69b36b8ffb85c66a395137cc89cd70bd] |
tiger128,4 | 1.0905900340881 [sample:10f15bbde5f13452c365c54d1623ba99] |
gost | 1.1367739732208 [sample:b0278f172b9f94c86d8344c28e58b8727c0396f6dfb11648070ec188d53bef44] |
md2 | 1.2356340056915 [sample:8a4b081d657c2099cbfaee796217759f] |
snefru256 | 1.381886079422 [sample:2ffb1850bb73024a262f842c5e7dbbe37256b6a1562b8b6c95d3a5c0d3b29f5b] |
snefru | 1.6106969665833 [sample:2ffb1850bb73024a262f842c5e7dbbe37256b6a1562b8b6c95d3a5c0d3b29f5b] |
可以看出fnv164最快,Sha512和md5在性能上对比,MD5会稍微快一些,但是不明显,而Sha512却比md5安全多了,不过由于占的位数太长,存储空间占用不少,如果使用md5(sha512())的话,是比较折衷且优秀的算法。
文章转载自:http://www.ttmd5.com/article.php?id=14
PHP使用hash_algos函数计算哈希值,之间的性能排序的更多相关文章
- day30 __hash__ 计算哈希值
hash() # __hash__哈希的时候会根据内存地址进行哈希,因为地址不同所以哈希的值也不同,哪怕是完全一样子的属性得出的哈希值也不一样因此存在需要某些时刻期望属性相同得出相同哈希值可以控制对象 ...
- C# 计算字符串/文件的哈希值(MD5、SHA)
原文 C# 计算字符串的哈希值(MD5.SHA) 已做修改 一.关于本文 本文中是一个类库,包括下面几个函数: /// 1)计算32位MD5码(大小写):Hash_MD5_32 /// 2)计算16位 ...
- 图像相似度计算之哈希值方法OpenCV实现
http://blog.csdn.net/fengbingchun/article/details/42153261 图像相似度计算之哈希值方法OpenCV实现 2014-12-25 21:27 29 ...
- Java 对象的哈希值是每次 hashCode() 方法调用重计算么?
对于没有覆盖hashCode()方法的对象 如果没有覆盖 hashCode() 方法,那么哈希值为底层 JDK C++ 源码实现,实例每次调用hashcode()方法,只有第一次计算哈希值,之后哈希值 ...
- 2021-2-17:Java HashMap 的中 key 的哈希值是如何计算的,为何这么计算?
首先,我们知道 HashMap 的底层实现是开放地址法 + 链地址法的方式来实现. 即数组 + 链表的实现方式,通过计算哈希值,找到数组对应的位置,如果已存在元素,就加到这个位置的链表上.在 Java ...
- c#之如何计算哈希值字符串
代码如下: /// <summary> /// 计算哈希值字符串 /// </summary> public static string ComputeHash(byte[] ...
- 9 - Python函数定义-位置参数-返回值
目录 1 函数介绍 1.1 为什么要使用函数 1.2 Python中的函数 2 函数的基本使用 3 函数的参数 3.1 参数的默认值 3.2 可变参数 3.2.1 可变位置传参 3.2.2 可变关键字 ...
- 红黑树规则,TreeSet原理,HashSet特点,什么是哈希值,HashSet底层原理,Map集合特点,Map集合遍历方法
==学习目标== 1.能够了解红黑树 2.能够掌握HashSet集合的特点以及使用(特点以及使用,哈希表数据结构) 3.能够掌握Map集合的特点以及使用(特点,常见方法,Map集合的遍历) 4.能够掌 ...
- mysql计算两个日期之间的天数
MYSQL自带函数计算给定的两个日期的间隔天数 有两个途径可获得 1.利用TO_DAYS函数 select to_days(now()) - to_days('20120512') 2 ...
随机推荐
- MySQL 批量导入 csv 文件
注意编码一致性,如:我的数据库是utf-8编码,csv文档的编码也是utf-8. 导入使用 LOAD DATA LOCAL INFILE 详细用法请参看文档或者书籍. mysql user表结构: ...
- C语言实现GBK/GB2312/五大码之间的转换(转)
源:C语言实现GBK/GB2312/五大码之间的转换 //----------------------------------------------------------------------- ...
- (六)Jquery Mobile主题及插件的使用
二.自定义主题 根据js自带的主题,提取出来进行更改 来自为知笔记(Wiz)
- ASP.net AJAX Toolkit —— DynamicPopulateExtender
<%@ Page Language="C#" AutoEventWireup="true" Title="DynamicPopulate Sam ...
- 直流电机驱动PWM频率(转)
源:直流电机驱动PWM频率 1.没有统一的标准,其实PWM的频率和你的电机感抗和你需要的速度响应时间有很大的关系.一般的电机用14K就足够了.当然自需要简单的调速可以随便选. 如果电机转速比较高,感抗 ...
- usb开发
usb开发 USB HID报告及报告描述符简介 LibUSB通过SetReport()请求与USBHID设备通信 libusb开发者指南 USB枚举和HID枚举实例 USB命令 BusHound数据分 ...
- C语言-数组
C语言中使用数组来存储相同类型的大批量数据. 数组: 数组名:起名规则和变量名一样: 定义数组:数组每个元素存储的数据类型+数组名[常量(时表示数组分配存储数据类型的个数也就是长度)]={每个元素,以 ...
- 分布式事务 & 两阶段提交 & 三阶段提交
可以参考这篇文章: http://blog.csdn.net/whycold/article/details/47702133 两阶段提交保证了分布式事务的原子性,这些子事务要么都做,要么都不做. 而 ...
- [Angular Tutorial] 6-Two-way Data Binding
在这一步中,您将会添加一个新特性来使得您的用户可以控制电话列表中电话的顺序,动态改变顺序是由创建一个新的数据模型的特性实现的,将它和迭代器绑定在一起,并且让数据绑定神奇地处理下面的工作. ·除了搜索框 ...
- Windows 7 Professional安装多语言包
本文出自 "王春海的博客" 博客,请务必保留此出处http://wangchunhai.blog.51cto.com/225186/223635 下载了Windows 7 Prof ...