您好,欢迎访问三七文档
MD5加密算法实现过程分享者:田恬恬2017.11.08过程进制转换填充信息分组初始化变量处理分组数据输出举例:对字符串“jklmn”使用MD5加密算法进行加密。进制转换jklmn信息长度ASCII码106107108109110二进制11010101101011110110011011011101110101000十六进制6A6B6C6D6E28信息长度:5×8=40(bit)填充1、在二进制信息的后面填充一个1和多个0,直至达到448位即56个字节。以十六进制显示填充:填充前6A6B6C6D6E填充后6A6B6C6D6E8000000000……0000000010000000400位即50个字节40位即5个字节填充2、附加一个以二进制表示的填充前信息长度(单位为bit),如果二进制表示的填充前信息长度超过64位,则取低64位。以十六进制显示填充:填充后6A6B6C6D6E8000000000……00000000280000……0000填充完成之后信息长度为512bit,即64个字节。10000000400位即50个字节40位即5个字节64位即8个字节信息分组填充完成之后:6A6B6C6D6E8000000000……00000000280000……0000注意,在实际程序中,信息的表示方式为:6D6C6B6A0000806E0000……000000000000002800000000则分组结果为:6D6C6B6A0000806E00000000……000000280000000016个分组,每组32位初始化变量初始化四个链接变量(以十六进制显示):A=0x67452301B=0xEFCDAB89C=0x98BADCFED=0x10325476令a=Ab=Bc=Cd=D处理分组数据进行四轮循环运算,每轮进行16次操作。每次操作对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^ZI(X,Y,Z)=Y^(X|(~Z))每轮操作: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)处理分组数据第一轮:FF(a,b,c,d,M0,7,0xd76aa478)FF(d,a,b,c,M1,12,0xe8c7b756)FF(c,d,a,b,M2,17,0x242070db)FF(b,c,d,a,M3,22,0xc1bdceee)FF(a,b,c,d,M4,7,0xf57c0faf)FF(d,a,b,c,M5,12,0x4787c62a)FF(c,d,a,b,M6,17,0xa8304613)FF(b,c,d,a,M7,22,0xfd469501)FF(a,b,c,d,M8,7,0x698098d8)FF(d,a,b,c,M9,12,0x8b44f7af)FF(c,d,a,b,M10,17,0xffff5bb1)FF(b,c,d,a,M11,22,0x895cd7be)FF(a,b,c,d,M12,7,0x6b901122)FF(d,a,b,c,M13,12,0xfd987193)FF(c,d,a,b,M14,17,0xa679438e)FF(b,c,d,a,M15,22,0x49b40821)非线性函数:F(X,Y,Z)=(X&Y)|((~X)&Z)操作:FF(a,b,c,d,Mj,s,ti):a=b+((a+F(b,c,d)+Mj+ti)s)处理分组数据第二轮:GG(a,b,c,d,M1,5,0xf61e2562)GG(d,a,b,c,M6,9,0xc040b340)GG(c,d,a,b,M11,14,0x265e5a51)GG(b,c,d,a,M0,20,0xe9b6c7aa)GG(a,b,c,d,M5,5,0xd62f105d)GG(d,a,b,c,M10,9,0x02441453)GG(c,d,a,b,M15,14,0xd8a1e681)GG(b,c,d,a,M4,20,0xe7d3fbc8)GG(a,b,c,d,M9,5,0x21e1cde6)GG(d,a,b,c,M14,9,0xc33707d6)GG(c,d,a,b,M3,14,0xf4d50d87)GG(b,c,d,a,M8,20,0x455a14ed)GG(a,b,c,d,M13,5,0xa9e3e905)GG(d,a,b,c,M2,9,0xfcefa3f8)GG(c,d,a,b,M7,14,0x676f02d9)GG(b,c,d,a,M12,20,0x8d2a4c8a)非线性函数:G(X,Y,Z)=(X&Z)|(Y&(~Z))操作:GG(a,b,c,d,Mj,s,ti):a=b+((a+G(b,c,d)+Mj+ti)s)信息分组下标的确定:(5*i+1)%16i的值为1-15处理分组数据第三轮:HH(a,b,c,d,M5,4,0xfffa3942)HH(d,a,b,c,M8,11,0x8771f681)HH(c,d,a,b,M11,16,0x6d9d6122)HH(b,c,d,a,M14,23,0xfde5380c)HH(a,b,c,d,M1,4,0xa4beea44)HH(d,a,b,c,M4,11,0x4bdecfa9)HH(c,d,a,b,M7,16,0xf6bb4b60)HH(b,c,d,a,M10,23,0xbebfbc70)HH(a,b,c,d,M13,4,0x289b7ec6)HH(d,a,b,c,M0,11,0xeaa127fa)HH(c,d,a,b,M3,16,0xd4ef3085)HH(b,c,d,a,M6,23,0x04881d05)HH(a,b,c,d,M9,4,0xd9d4d039)HH(d,a,b,c,M12,11,0xe6db99e5)HH(c,d,a,b,M15,16,0x1fa27cf8)HH(b,c,d,a,M2,23,0xc4ac5665)非线性函数:H(X,Y,Z)=X^Y^Z操作:HH(a,b,c,d,Mj,s,ti):a=b+((a+H(b,c,d)+Mj+ti)s)信息分组下标的确定:(3*i+5)%16i的值为1-15处理分组数据第四轮:II(a,b,c,d,M0,6,0xf4292244)II(d,a,b,c,M7,10,0x432aff97)II(c,d,a,b,M14,15,0xab9423a7)II(b,c,d,a,M5,21,0xfc93a039)II(a,b,c,d,M12,6,0x655b59c3)II(d,a,b,c,M3,10,0x8f0ccc92)II(c,d,a,b,M10,15,0xffeff47d)II(b,c,d,a,M1,21,0x85845dd1)II(a,b,c,d,M8,6,0x6fa87e4f)II(d,a,b,c,M15,10,0xfe2ce6e0)II(c,d,a,b,M6,15,0xa3014314)II(b,c,d,a,M13,21,0x4e0811a1)II(a,b,c,d,M4,6,0xf7537e82)II(d,a,b,c,M11,10,0xbd3af235)II(c,d,a,b,M2,15,0x2ad7d2bb)II(b,c,d,a,M9,21,0xeb86d391)非线性函数:I(X,Y,Z)=Y^(X|(~Z))操作:II(a,b,c,d,Mj,s,ti):a=b+((a+I(b,c,d)+Mj+ti)s)信息分组下标的确定:(7*i)%16i的值为1-15输出A=A+a;B=B+b;C=C+c;D=D+d;ABCD十进制-665698464-20888941401366763210464971262二进制11011000010100100011111101100000100000110111111000000001010001000101000101110111001001101100101000011011101101101110010111111110十六进制D8523F60837E0144517726CA1BB6E5FE输出A=0xD8523F60;B=0x837E0144;C=0x517726CA;D=0x1BB6E5FE;最终输出结果,即字符串“jklmn”使用MD5加密算法进行加密的结果:603F52D844017E83CA267751FEE5B61BThankyou
本文标题:MD5加密算法
链接地址:https://www.777doc.com/doc-5593132 .html