MD5的算法原理
1个回答
展开全部
MD5简介:
MD5是Message-digestAlgorithm5(信息-摘要算法)的缩写,经MD2、MD3和MD4发展而来。它是把一个任意长度的字节串变换成一定长的大整数。MD5算法是在MD4的基础上增加了“安全-带子”(safety-belts)的概念。虽然MD5比MD4稍微慢一些,但却更为安全。这个算法很明显的由四个和MD4设计有少许不同的步骤组成。在MD5算法中,信息摘要的大小和填充的必要条件与MD4完全相同。由于MD5算法的使用不需要支付任何版权费用,所以在一般的情况下MD5不失为一种非常优秀的中间技术。
MD5原理:
MD 5算法是对输入信息进行初始化处理后,以512位分组来处理输入的信息,每一分组又被划分
成为16个32位子分组,经过了一系列的变换处理后,输出由四个32位分组,再将这四个32位分组级
联后生成一个128位散列值[5- 6]。具体过程如下:
(1)首先对信息进行填充,即在信息的后面填充一个1和若干个0使其字节长度对512求余的结
果等于448。
(2)对MD 5进行初始化,即MD 5中用四个32位被称作链接变量的整数参数,它们分别为:A =
0x01234567,B = 0x89abcdef,C = 0xfedcba98,D =0x76543210。
(3)开始进入算法的四轮循环运算。循环的次数是信息中512位信息分组的数目。将上面四个链
接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。主循环有四轮,第一轮进行16次操作。
每次操作对a、b、c和d中的其中三个做一次非线性函数运算,然后将所得结果加上第四个变量,再将所得结果向右位移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。
以下是每次操作中用到的四个非线性函数(每轮一个)。
f(x,y,z)=(x&y) ((~x)&z)
g(x,y,z)=(xz) (y&(~z))
h(x,y,z)=x y z
i(x,y,z)=y (x (~z))
(其中:“&”是与运算,“ ”是或运算,“~”是非运算,“ ”是异或运算,它们都是位运算符。)
这四个函数的说明:如果x、y和z的对应位是独立和均匀的,那么结果的每一位也应是独立和均
匀的。f是一个逐位运算的函数。即,如果x,那么y,否则z。函数h是逐位奇偶操作符。假设mj表示
消息的第j个子分组(从0到15),ti为第I步中的常数,< < <s表示循环左移s位,
则四种操作为:ff(a,b,c,d,mj,s,ti)表示a=b+((a+(f(b,c,d)+mj+ti)< < <s)
gg(a,b,c,d,mj,s,ti)表示a=b+((a+(g(b,c,d)+mj+ti)< < <s)
hh(a,b,c,d,mj,s,ti)表示a=b+((a+(h(b,c,d)+mj+ti)< < <s)
ii(a,b,c,d,mj,s,ti)表示a=b+((a+(i(b,c,d)+mj+ti)< < <s)
常数ti表示在第i步中,ti是4294967296*abs(sin(i))的整数部分,4294967296等于2的32次
方,i的单位是弧度。所有这些完成之后,将A、B、C、D分别加上a、b、c、d。然后用下一分组
数据继续运行算法,最后的输出是A、B、C和D的级联。
MD5是Message-digestAlgorithm5(信息-摘要算法)的缩写,经MD2、MD3和MD4发展而来。它是把一个任意长度的字节串变换成一定长的大整数。MD5算法是在MD4的基础上增加了“安全-带子”(safety-belts)的概念。虽然MD5比MD4稍微慢一些,但却更为安全。这个算法很明显的由四个和MD4设计有少许不同的步骤组成。在MD5算法中,信息摘要的大小和填充的必要条件与MD4完全相同。由于MD5算法的使用不需要支付任何版权费用,所以在一般的情况下MD5不失为一种非常优秀的中间技术。
MD5原理:
MD 5算法是对输入信息进行初始化处理后,以512位分组来处理输入的信息,每一分组又被划分
成为16个32位子分组,经过了一系列的变换处理后,输出由四个32位分组,再将这四个32位分组级
联后生成一个128位散列值[5- 6]。具体过程如下:
(1)首先对信息进行填充,即在信息的后面填充一个1和若干个0使其字节长度对512求余的结
果等于448。
(2)对MD 5进行初始化,即MD 5中用四个32位被称作链接变量的整数参数,它们分别为:A =
0x01234567,B = 0x89abcdef,C = 0xfedcba98,D =0x76543210。
(3)开始进入算法的四轮循环运算。循环的次数是信息中512位信息分组的数目。将上面四个链
接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。主循环有四轮,第一轮进行16次操作。
每次操作对a、b、c和d中的其中三个做一次非线性函数运算,然后将所得结果加上第四个变量,再将所得结果向右位移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。
以下是每次操作中用到的四个非线性函数(每轮一个)。
f(x,y,z)=(x&y) ((~x)&z)
g(x,y,z)=(xz) (y&(~z))
h(x,y,z)=x y z
i(x,y,z)=y (x (~z))
(其中:“&”是与运算,“ ”是或运算,“~”是非运算,“ ”是异或运算,它们都是位运算符。)
这四个函数的说明:如果x、y和z的对应位是独立和均匀的,那么结果的每一位也应是独立和均
匀的。f是一个逐位运算的函数。即,如果x,那么y,否则z。函数h是逐位奇偶操作符。假设mj表示
消息的第j个子分组(从0到15),ti为第I步中的常数,< < <s表示循环左移s位,
则四种操作为:ff(a,b,c,d,mj,s,ti)表示a=b+((a+(f(b,c,d)+mj+ti)< < <s)
gg(a,b,c,d,mj,s,ti)表示a=b+((a+(g(b,c,d)+mj+ti)< < <s)
hh(a,b,c,d,mj,s,ti)表示a=b+((a+(h(b,c,d)+mj+ti)< < <s)
ii(a,b,c,d,mj,s,ti)表示a=b+((a+(i(b,c,d)+mj+ti)< < <s)
常数ti表示在第i步中,ti是4294967296*abs(sin(i))的整数部分,4294967296等于2的32次
方,i的单位是弧度。所有这些完成之后,将A、B、C、D分别加上a、b、c、d。然后用下一分组
数据继续运行算法,最后的输出是A、B、C和D的级联。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询