MD5的全称为Message Digest Algorithm 5(即信息摘要算法第五版),这个概念十分抽象,而且又不太好理解,其实,MD5说白了就是平时我们所说的文件条形码,简称文件条码。就像商品一样,每个商品都有各自的条形码一样,不同的商品有不同的条形码,同样,对于软件产品(或文件)来说,不同的文件,其文件条形码也不尽相同。可以说,文件条码是文件固有属性之一,就像文件名,文件大小,修改日期等等一样。
MD5的特点
MD5具有哪些特点呢?首先,MD5的唯一性强,能唯一标识一个文件。我们知道商品的条形码是没有重复的,同样,不同的文件也应该有不同的条形码,也就是说,若文件的内容或长度稍有变化,则其文件条码一定会发生巨大的改变。其次,MD5所关注的仅仅是文件的内容本身,而与文件名等其他信息无关,就好比我们到店里买东西一样,外包装不同的物品,但只要其条形码完全一致,我们就可以认定这两样东西是同一产品。
MD5的实质
MD5从本质上来说,他就是一个函数,由于其采用散列算法,所以又称为散列函数,所谓散列,简单地说就是我们前面所提到的唯一性,散列性越高,唯一性越强,发生冲突的几率也就越低。若写成数学函数模型就是y=f(x),其中,x代表的是文件内容,f表示MD5散列函数,而y就是该散列函数的计算结果,也就是平时我们常说的MD5值。回顾计算机函数的基本性质,对于计算机函数来说,一个输入x只能对应一个输出y,而一个输出y可以对应无数个输入x,由此可见,MD5同样也是有一定的冲突的,故而MD5函数具有不可逆性,即无法通过对MD5值反算得到原文件内容,因此,MD5时常也被用作加密用。
早期的文件条码用的是CRC或CRC32,由于其算法快捷,且唯一性高,因此被广泛用于计算机文件的快速校验中,进而成为第一代文件条码,随着软件的规模不断扩大,文件数量的不断巨增,长度仅有8位数的CRC远不能胜任,于是第二代文件条码诞生了,这便是MD5,他具有32位数,能唯一标识更多的文件,虽说在算法速度上稍逊于CRC,但其数位长,唯一性高,最主要就是其源代码在网上是公开发表的,可以很容易地得到并集成到现有的任意程序中,故而受到广大网友的青睐,因此我认为,在不久的将来MD5很有可能成为文件条码的行业标准。
MD5的应用
MD5最早开发的初衷就是用于密码加密的,但后来据说被中国的某个王教授给破解了,故而其加密价值就没有了。现在的MD5最大的作用便是前面我们提到的文件识别。在此,我想先举个生活中的例子,以前我们到超市里买东西,由于那时候超市的发展才刚起步,东西不多,所以买东西时,只要看一下商品名称以及所对应的价格就可直接去付账了,而现在却不行了,超市里的东西越来越多,东西随处乱放,若还像以前一样只看商品名称就决定买下来的话是不行的,若不看条形码很是难保证你买的东西和你看到的价格是一致的,我就上过好几回当,买错东西,现在学聪明了,买东西前要看条形码,不看商品名。现在回过来,我们继续说文件,例如,平时我们经常喜欢在网上下载一些东西,在以前,若从网上下载一个文件,我们往往只能看到其文件名,没有条形码,某些好点的网站最多还给你看一些文件大小,但不具体如几MB,随后我们便下载了,然后隔几天又在其他网站上看到另一个相似的“更好的”文件,然后也把它给下了,下好以后才发现原来这两个文件其实是一样的,这才大呼上当,文件小点倒无所谓,如果文件很大,动则数G,若下了两份一样的文件,光财力上不说,你时间精力要花费多少呢?而现在的下载,如果有MD5或文件条形码在的话,我们通过比较它们的条形码,便可以知道这是否为同一软件产品,以免再次重复下载,造成不必要的损失。当然,MD5还有其他许多用处,这里就不说了。
当然,有的网站还是用CRC作为条码,或使用SHA1,一个和MD5差不多的散列函数,但其代码很难弄到,没有权威发布网站,故而用的不是很广泛。更有甚者,有的网站还有自己的散列函数,像eMule等,那仅仅只是特例,而网上我看得最多便是MD5,由于其源代码通俗易懂,所以我大胆预测,其成为行业标准的可能性很高。