MD5算法的实现以及相关应用
1.基本介绍:
在Web信息的检索过程中,对文本的保存和建立文本索引是文本检索的关键步骤。而保存文本,并对这些文本建立索引,就需要对已有的网页进行预处理。而MD5算法就是预处理两个过程中的其中一个——网页去重的常用算法。MD5(Message Digest5)算法,顾名思义,这个算法的基本思想是通过信息摘要的方式,将消息的特征进行提取,网页去重则就是基于提取的这些特征来判重,完成网页去重的目的。
2.算法描述
消息长度任意,但准备时需将其分成若干个512bit的组,每一分组又被划分为16个32bit的子分组,经过处理后,输出四个32bit的分组,级联后生成128bit的消息摘要。
具体步骤如下:
①填充:对消息进行填充,使其字节长度对512取余的结果为448,即信息的长度为N*512+448 bit => N*64+56 Byte(N为正整数)。而填充的方法是将信息后填充一个1和若干0,直到满足信息长度的条件。最后,再附加一个一64位的二进制数来表示填充前的长度。填充后的信息长度为512bit的整数倍。
②初始化MD缓冲器:用4个32bit的寄存器,每轮输出128bit。。用A,B,C,D四个32bit字,将初始存数以十六进制表示:
A = 0x01234567;B = 0x89ABCDEF;C = 0xFEDCBA98;D = 0x76543210
③处理分组:通过4轮循环的函数处理各个分组,循环次数是512bit分组数。4轮循环的每一轮是相似的,每次操作对A,B,C,D中的三个做一次非线性函数运算,再将结果加上第四个变量,再将所得结果向右环移一个不定的数, 并加上A,B,C,D中之一。 最后,用该结果取代 A,B,C,D中之一。
四次非线性函数如下:
f(x,y,z) =(x&y)|((~x)&z)
g(x,y,z) =(x&z)|(y&(~z))
h(x,y,z) =x^y^z
i(x,y,z)=y^(x|(~z))
其中&是与,|是或,~是非,^是异或
通过这四个函数,说明了如果x、y、z的对应位是独立和均匀的,那么结果的每一位也是独立和均匀的。
④输出消息摘要:将L个分组处理完后,其输出便是所需的128bit的消息摘要。
3.算法特点
①压缩性:对于任意长度的输入信息,经过MD5算法的处理后,其输出的位数是固定的;
②易于计算:从原数据能够很容易计算出MD5值;
③抗修改性:对原数据进行任何改动(即使只修改1个字节),都会使得所得到的MD5值有很大不同。
④强抗碰撞:即使已经获得了原数据和其MD5值,但想找到一个具有相同MD5值的数据是非常困难的,即意味着伪造原数据的难度非常大;
⑤不可逆性:不能从MD5值反向推导出原数据值,所以MD5算法的过程也可以看作是一个信息加密的过程。
4.算法应用
①一致性验证:
这是MD5算法最典型的应用,也是在学习Web信息检索过程中,用于网页去重的方法。其应用方式是对一段信息产生信息摘要,这段信息摘要就类似于人的指纹,对于每一段信息来说都是属于自身的独特标志,所以又被称作“数字指纹”。而网页去重则通过比对这些信息摘要,判断是否有重复的网页,实现网页去重的目的。
另一方面,“数字指纹”还可以用在软件下载站、论坛数据库、系统文件安全等方面,用于文件校验。
②数字签名:
通过为一段信息生成信息摘要,达到“指纹”的作用。在防止被“篡改”的信息上生成一个MD5的值并记录,如果有其他人对这段信息进行了任何修改,再次对这段信息进行一次MD5算法后,就可以发现有人修改看文件的内容,这个功能是对MD5算法抗修改性最好的体现。
③安全访问认证
用通俗的话来说,就是我们常用的“登录密码”,当用户进行登录是,将用户输入的密码进行MD5 Hash运算,得到的结果与保存的正确密码的MD5值进行比较,以此来确定输入的密码是否正确。
而且,由于MD5算法的不可逆性,我们可以避免有管理员权限的用户获取明码,使得用户密码的安全星得到保障。
5.总结
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式,简单来看,就是MD5 = 数据压缩 + 数据加密。