2011年10月31日,腾讯即通平台部高级总监庄泗华在北京航空航天大学的演讲《1亿在线背后的技术挑战》。
里面说到,以前版本的QQ登陆密码在向服务器传送时是先经过两次MD5加密。就想整明白MD5是怎么回事,学《网络安全》时讲的各种加密算法早忘了,就去网上查了下。一句话:MD5(信息摘要算法)就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”。
自己做了如下尝试:
(1)对一个word文件“例子.doc”右键查看其属性,点“文件校验”选项卡,里面有自动生成的该文件的MD5哈希值。如图:
(2)复制该word文件并改名为“例子_附件.doc”,然后对比着两个文件的MD5哈希值,结果完全相同。
(3)将“例子_附件.doc”改名为“例子_附件.docx”(即改变扩展名),然后对比两个文件的MD5哈希值,结果不同。
(4)将“例子_附件.docx”的扩展名改回.doc,然后在“例子_附件.doc”文件中添加一个空格,然后再对比两个文件的MD5哈希值,结果不同。
结论:
(1)文件名(不包括扩展名)只是标识文件的一个符号,与文件内容无关。
(2)MD5等信息摘要算法生成的哈希值来自除文件名(指基本名)外的一切文件信息,任何地方的一处改动都会导致MD5哈希值的改变。
(3)因此MD5算法多用于对文件进行唯一性校验以防止篡改。
比如现在流行的网络硬盘,它在存储用户上传的文件时会生成每个文件的哈希值,这样一方面可以验证文件完整性,另一方面可以实现非重复存储和秒速上传。因为网盘的服务器对哈希值相同的文件只存储一份(即使文件名不同),所以如果已有用户已上传过某文件,其他用户再上传该文件时就可实现妙速上传。