<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[ MD5与SHA算法及微软出品：MD5和SHA1值验证命令行工具结合PHP md5 vs sha1 性能测试看哪个快一些。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Unix/LinuxC技术]]></category>
<pubDate>Mon, 02 Mar 2015 02:19:50 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：对于文件块验证，或字符串的传输是否在网络中修改过，这儿有各种方法，MD5、SHA1、CRC32这三个用于检测文件是否被修改过，哪个可靠性最高？我看特别是分片上传这块，有的是md5，有的是sha1,有的是crc的验证，如优酷（是crc的）、百度云、126的邮箱大附件上传等都有这么一个环节~于是，在网上找相关文章了解一下其不同及性能上的差别。<br/><br/>MD5 和SHA1的基本原理都是一样的，都是将一个文件按照一定的算法计算后得到一个固定位数的数据，这个数据就是这个文件的（MD5,SHA1)值。而且这个值是唯一的，也就是说只有这个文件经过计算后能够得到这个值，里面哪怕有一个标点的改动所计算的值的差别都会很大。只需要在本地再进行一次MD5，SHA1的计算和原值比较即可知道源文件是否完整。CRC校验通常是将CRC的校验码放在数据文件的后面一同发送给接受方，接收方再次通过计算来判定数据的完整性。<br/>目前如果用于加密领域，SHA的安全性能最高。如果你的可靠性是指文件的完整性，那么个人觉得MD5和SHA1要比CRC32好一些。<br/>————————————————————————————————————————————————————————————————————————————<br/>一、MD5与SHA算法 <br/>&nbsp;&nbsp;&nbsp;&nbsp;Hash函数又称杂凑函数，用于摘要算法，它是将不定长的明文信息经过复杂的运算得到一个定长的数值，这就是“签名”。摘要算法与一般的对称或非对称加密算法不同，它并不用于防止信息被窃取，而是用于证明原文的完整性和准确性，也就是说，数字签名主要是用于防止信息被篡改。<br/><br/>由于Hash函数产生定长的数字签名，其结果是个有限的集合，而待签名的明文信息可以是计算机网络上传输的任意信息，也就是说，明文信息是一个无限集合，两个集合之间其实无法构成一一对应的关系，总会有多个明文信息产生相同的数字签名的情况发生，这就是所谓的“碰撞”。不过Hash函数的可靠性在概率上仍可以算法的健壮性来保证，数字签名类似指纹，只要选择足够全的算法，产生碰撞的概率就会足够小，可令现代最先进的计算设备也找不出“碰撞”，这样算法就不会被破解了。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; MD5(RFC1321)诞生于1991年，全称是“Message-Digest Algorithm信息摘要算法)5”，由MIT的计算机安全实验室和RSA安全公司共同提出，之前已经有MD2、MD3和MD4几种算法。MD5克服了MD4的缺陷，生成128bit的摘要信息串，出现之后迅速成为主流算法，并在1992年被收录到RFC中。<br/><br/>MD5算法是1991年发布的一项数字签名加密算法，它当时解决了MD4算法的安全性缺陷，成为应用非常广泛的一种算法。作为Hash函数的一个应用实例。<br/><br/>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为主流。<br/><br/>SHA-1的应用范围或许比MD5更加广泛，其安全性较MD5要高出很多。SHA-1是美国国家标准技术研究院(NIST)与美国国家安全局(NSA)共同设计的，一些重要的场合都选择SHA-1来做数字签名。美国政府更是早在1994年就开始采用了SHA-1算法。<br/><br/>MD5和SHA-1是当前应用最为广泛的两种散列算法。常见的Unix系统口令以及多数论坛/社区系统的口令都是经MD5处理后保存其摘要信息串，在互联网上，很多文件在开放下载的同时都提供一个MD5的信息摘要，使下载方(通过MD5摘要计算)能够确认所下载的文件与原文件一致，以此来防止文件被篡改。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;MD5和SHA-1还常被用来与公钥技术结合来创建数字签名。当前几乎所有主要的信息安全协议中都使用了SHA-1或MD5，包括SSL(HTTPS就是SSL的一种应用)、TLS、PGP、SSH、S/MIME和IPSec，因此可以说SHA-1和MD5是当前信息安全的重要基础之一。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;不过，从技术上讲，MD5和SHA-1的碰撞可在短时间内被求解出并不意味着两种算法完全失效。例如，对于公文的数字签名来说，寻找到碰撞与寻找到有特定含义的碰撞之间仍有很大的差距，而后者才会使伪造数字公文成为现实。但无论如何，王小云教授所掌握的方法已经为短时间内寻找到MD5或SHA-1的碰撞成为可能，这足以使经过MD5或SHA-1处理的数字签名再也难以成为法律认可的依据。<br/><br/>MD5和SHA-1就曾经被认为是足够安全的Hash算法。虽然早在1994年就有研究报告指出，如果用运算能力最强的机器，平均用24天就可能找到一个MD5的碰撞，但这个方法的效率和成本在现实中并不具备实际的意义。王小云在接受本报记者独家采访时透露，她独创的“模差分”算法可以用一般性能的计算机在两个小时内就找到MD5的碰撞，已经为实际应用提供了可能。<br/><br/>来自：http://blog.csdn.net/liyangbing315/article/details/5682107<br/><br/>二、微软出品：MD5和SHA1值验证命令行工具<br/>基本使用方法：<br/>fciv.exe&nbsp;&nbsp;myfilm.iso&nbsp;&nbsp;-wp -md5 -xml mydb.xml<br/>该命令可以计算myfilm.iso的md5值，并且保存到mydb.xml当中，同时会保存该文件的名称，-wp的作用是去掉文件的路径信息仅仅保存文件名<br/><br/>fciv.exe -list -md5 -xml mydb.xml <br/>打印mydb.xml当中的md5值以及相应的文件名称，它的显示格式也比较特别，首先打印md5值，随后是文件名称<br/><br/>fciv.exe d:&#92;mymusic&#92;&nbsp;&nbsp; -tpye *.mp3 -wp -md5 -xml mymusic.xml<br/>计算d盘mymusic文件夹下面，所有以MP3结尾的文件的md5值并且保存到mymusic.xml当中<br/><br/>由于这是一个命令行工具，因此可以批处理的方式，大量自动化计算各种md5值。<br/><br/>工具下载地址和基本的使用方法介绍见下面的链接<br/>http://support.microsoft.com/kb/841290 <br/>DownLoad Url：http://download.microsoft.com/download/c/f/4/cf454ae0-a4bb-4123-8333-a1b6737712f7/Windows-KB841290-x86-ENU.exe<br/> <br/>摘自：http://blog.chinaunix.net/uid-20385936-id-3841729.html<br/><br/>三、PHP md5 vs sha1 性能测试<br/> 先上代码：<br/><textarea name="code" class="php" rows="15" cols="100">
&lt;?php
 $loop = 100000;
$input = &#039;情缘巴士站
演唱：谭咏麟
 
一步一想心中向着渺茫
沿路挂着城市新装
冬日追赶风中漂亮女郎
怀念令体温正下降
一幅思忆车厢邂逅你
坐近身边像情侣没距离
轻摆中当肩碰着你
是最不可解释的完美
 
正是你
我没逃避
在这浅水湾的一个终站
让两颗心一起
走出美丽传奇
你缠绵无尽一生不忘记
 
冬日海湾多少个梦酝藏
藏着昨日情侣衷伤
 
一夜疯狂不可以是永恒
潮汐里恋火已埋藏
一幅思忆车厢邂逅你
坐近身边像情侣没距离
轻摆中当肩碰着你
是最不可解释的完美
 
正是你
我没逃避
在这浅水湾的一个终站
让两颗心一起
走出美丽传奇
你缠绵无尽一生不忘记
 
正是你
我没逃避
在这浅水湾的一个终站
让两颗心一起
走出美丽传奇
你缠绵无尽一生不忘记&#039;;
 
$start = microtime(true);
for ($i = 0; $i &lt; $loop; ++$i) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;md5($input . $i);
&#125;
echo microtime(true) - $start, &quot;&#92;r&#92;n&quot;;
 
$start = microtime(true);
for ($i = 0; $i &lt; $loop; ++$i) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;sha1($input . $i);
&#125;
echo microtime(true) - $start, &quot;&#92;r&#92;n&quot;;
</textarea><br/>Win7 PHP 5.3.5 cli 下连续三次的输出<br/>D:&#92;test&gt;php md5-vs-sha1.php<br/>0.36025786399841<br/>0.47072792053223<br/> <br/>D:&#92;test&gt;php md5-vs-sha1.php<br/>0.36374092102051<br/>0.47682809829712<br/> <br/>D:&#92;test&gt;php md5-vs-sha1.php<br/>0.37186717987061<br/>0.55312395095825<br/>Ubuntu Server 11.04 PHP 5.3.5 cli 下的连续三次的输出<br/>&nbsp;&nbsp;<br/>$ php md5-vs-sha1.php<br/>0.4476261138916<br/>0.45379900932312<br/> <br/>$ php md5-vs-sha1.php<br/>0.43760395050049<br/>0.45441389083862<br/> <br/>$ php md5-vs-sha1.php<br/>0.44000005722046<br/>0.53387594223022<br/>由此可见，md5 会比 sha1 稍微快一点点，两者都不会造成性能问题。 <br/>From:http://my.oschina.net/heiing/blog/122914
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论]  MD5与SHA算法及微软出品：MD5和SHA1值验证命令行工具结合PHP md5 vs sha1 性能测试看哪个快一些。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>