MD5与SHA算法及微软出品:MD5和SHA1值验证命令行工具结合PHP md5 vs sha1 性能测试看哪个快一些。

jackxiang 2015-3-2 10:19 | |
背景:对于文件块验证,或字符串的传输是否在网络中修改过,这儿有各种方法,MD5、SHA1、CRC32这三个用于检测文件是否被修改过,哪个可靠性最高?我看特别是分片上传这块,有的是md5,有的是sha1,有的是crc的验证,如优酷(是crc的)、百度云、126的邮箱大附件上传等都有这么一个环节~于是,在网上找相关文章了解一下其不同及性能上的差别。

MD5 和SHA1的基本原理都是一样的,都是将一个文件按照一定的算法计算后得到一个固定位数的数据,这个数据就是这个文件的(MD5,SHA1)值。而且这个值是唯一的,也就是说只有这个文件经过计算后能够得到这个值,里面哪怕有一个标点的改动所计算的值的差别都会很大。只需要在本地再进行一次MD5,SHA1的计算和原值比较即可知道源文件是否完整。CRC校验通常是将CRC的校验码放在数据文件的后面一同发送给接受方,接收方再次通过计算来判定数据的完整性。
目前如果用于加密领域,SHA的安全性能最高。如果你的可靠性是指文件的完整性,那么个人觉得MD5和SHA1要比CRC32好一些。
————————————————————————————————————————————————————————————————————————————
一、MD5与SHA算法
    Hash函数又称杂凑函数,用于摘要算法,它是将不定长的明文信息经过复杂的运算得到一个定长的数值,这就是“签名”。摘要算法与一般的对称或非对称加密算法不同,它并不用于防止信息被窃取,而是用于证明原文的完整性和准确性,也就是说,数字签名主要是用于防止信息被篡改。

由于Hash函数产生定长的数字签名,其结果是个有限的集合,而待签名的明文信息可以是计算机网络上传输的任意信息,也就是说,明文信息是一个无限集合,两个集合之间其实无法构成一一对应的关系,总会有多个明文信息产生相同的数字签名的情况发生,这就是所谓的“碰撞”。不过Hash函数的可靠性在概率上仍可以算法的健壮性来保证,数字签名类似指纹,只要选择足够全的算法,产生碰撞的概率就会足够小,可令现代最先进的计算设备也找不出“碰撞”,这样算法就不会被破解了。

     MD5(RFC1321)诞生于1991年,全称是“Message-Digest Algorithm信息摘要算法)5”,由MIT的计算机安全实验室和RSA安全公司共同提出,之前已经有MD2、MD3和MD4几种算法。MD5克服了MD4的缺陷,生成128bit的摘要信息串,出现之后迅速成为主流算法,并在1992年被收录到RFC中。

MD5算法是1991年发布的一项数字签名加密算法,它当时解决了MD4算法的安全性缺陷,成为应用非常广泛的一种算法。作为Hash函数的一个应用实例。

SHA诞生于1993年,全称是安全散列算法(Secure Hash Algorithm),由美国国家安全局(NSA)设计,之后被美国标准与技术研究院(NIST)收录到美国的联邦信息处理标准(FIPS)中,成为美国国家标准,SHA(后来被称作SHA-0)于1995被SHA-1(RFC3174)替代。SHA-1生成长度为160bit的摘要信息串,虽然之后又出现了SHA-224、SHA-256、SHA-384和SHA-512等被统称为“SHA-2”的系列算法,但仍以SHA-1为主流。

SHA-1的应用范围或许比MD5更加广泛,其安全性较MD5要高出很多。SHA-1是美国国家标准技术研究院(NIST)与美国国家安全局(NSA)共同设计的,一些重要的场合都选择SHA-1来做数字签名。美国政府更是早在1994年就开始采用了SHA-1算法。

MD5和SHA-1是当前应用最为广泛的两种散列算法。常见的Unix系统口令以及多数论坛/社区系统的口令都是经MD5处理后保存其摘要信息串,在互联网上,很多文件在开放下载的同时都提供一个MD5的信息摘要,使下载方(通过MD5摘要计算)能够确认所下载的文件与原文件一致,以此来防止文件被篡改。

    MD5和SHA-1还常被用来与公钥技术结合来创建数字签名。当前几乎所有主要的信息安全协议中都使用了SHA-1或MD5,包括SSL(HTTPS就是SSL的一种应用)、TLS、PGP、SSH、S/MIME和IPSec,因此可以说SHA-1和MD5是当前信息安全的重要基础之一。

    不过,从技术上讲,MD5和SHA-1的碰撞可在短时间内被求解出并不意味着两种算法完全失效。例如,对于公文的数字签名来说,寻找到碰撞与寻找到有特定含义的碰撞之间仍有很大的差距,而后者才会使伪造数字公文成为现实。但无论如何,王小云教授所掌握的方法已经为短时间内寻找到MD5或SHA-1的碰撞成为可能,这足以使经过MD5或SHA-1处理的数字签名再也难以成为法律认可的依据。

MD5和SHA-1就曾经被认为是足够安全的Hash算法。虽然早在1994年就有研究报告指出,如果用运算能力最强的机器,平均用24天就可能找到一个MD5的碰撞,但这个方法的效率和成本在现实中并不具备实际的意义。王小云在接受本报记者独家采访时透露,她独创的“模差分”算法可以用一般性能的计算机在两个小时内就找到MD5的碰撞,已经为实际应用提供了可能。

来自:http://blog.csdn.net/liyangbing315/article/details/5682107

二、微软出品:MD5和SHA1值验证命令行工具
基本使用方法:
fciv.exe  myfilm.iso  -wp -md5 -xml mydb.xml
该命令可以计算myfilm.iso的md5值,并且保存到mydb.xml当中,同时会保存该文件的名称,-wp的作用是去掉文件的路径信息仅仅保存文件名

fciv.exe -list -md5 -xml mydb.xml
打印mydb.xml当中的md5值以及相应的文件名称,它的显示格式也比较特别,首先打印md5值,随后是文件名称

fciv.exe d:\mymusic\   -tpye *.mp3 -wp -md5 -xml mymusic.xml
计算d盘mymusic文件夹下面,所有以MP3结尾的文件的md5值并且保存到mymusic.xml当中

由于这是一个命令行工具,因此可以批处理的方式,大量自动化计算各种md5值。

工具下载地址和基本的使用方法介绍见下面的链接
http://support.microsoft.com/kb/841290
DownLoad Url:http://download.microsoft.com/download/c/f/4/cf454ae0-a4bb-4123-8333-a1b6737712f7/Windows-KB841290-x86-ENU.exe

摘自:http://blog.chinaunix.net/uid-20385936-id-3841729.html

三、PHP md5 vs sha1 性能测试
先上代码:

Win7 PHP 5.3.5 cli 下连续三次的输出
D:\test>php md5-vs-sha1.php
0.36025786399841
0.47072792053223

D:\test>php md5-vs-sha1.php
0.36374092102051
0.47682809829712

D:\test>php md5-vs-sha1.php
0.37186717987061
0.55312395095825
Ubuntu Server 11.04 PHP 5.3.5 cli 下的连续三次的输出
  
$ php md5-vs-sha1.php
0.4476261138916
0.45379900932312

$ php md5-vs-sha1.php
0.43760395050049
0.45441389083862

$ php md5-vs-sha1.php
0.44000005722046
0.53387594223022
由此可见,md5 会比 sha1 稍微快一点点,两者都不会造成性能问题。
From:http://my.oschina.net/heiing/blog/122914

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/7827/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2015-3-2 10:26
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]