¡¾ÍƼö¡¿MD5Ëã·¨
ÔÚһЩ³õʼ»¯´¦Àíºó£¬MD5ÒÔ512λ·Ö×éÀ´´¦ÀíÊäÈëÎı¾£¬Ã¿Ò»·Ö×éÓÖ»®·ÖΪ16¸ö32λ×Ó·Ö×é¡£Ëã·¨µÄÊä³öÓÉËĸö32λ·Ö×é×é³É£¬½«ËüÃǼ¶ÁªÐγÉÒ»¸ö128λɢÁÐÖµ¡£
Ê×ÏÈÌî³äÏûϢʹÆä³¤¶ÈÇ¡ºÃΪһ¸ö±È512λµÄ±¶Êý½öС64λµÄÊý¡£Ìî³ä·½·¨ÊǸ½Ò»¸ö1ÔÚ
ÏûÏ¢ºóÃæ£¬ºó½ÓËùÒªÇóµÄ¶à¸ö0£¬È»ºóÔÚÆäºó¸½ÉÏ64λµÄÏûÏ¢³¤¶È£¨Ìî³äǰ£©¡£ÕâÁ½²½
µÄ×÷ÓÃÊÇʹÏûÏ¢³¤¶ÈÇ¡ºÃÊÇ512λµÄÕûÊý±¶£¨Ëã·¨µÄÆäÓಿ·ÖÒªÇóÈç´Ë£©£¬Í¬Ê±È·±£²»
ͬµÄÏûÏ¢ÔÚÌî³äºó²»Ïàͬ¡£
Ëĸö32λ±äÁ¿³õʼ»¯Îª£º
A=0x01234567
B=0x89abcdef
C=0xfedcba98
D=0x76543210
ËüÃdzÆÎªÁ´½Ó±äÁ¿£¨chaining variable£©
½Ó׎øÐÐËã·¨µÄÖ÷Ñ»·£¬Ñ»·µÄ´ÎÊýÊÇÏûÏ¢ÖÐ512λÏûÏ¢·Ö×éµÄÊýÄ¿¡£
½«ÉÏÃæËĸö±äÁ¿¸´ÖƵ½±ðÍâµÄ±äÁ¿ÖУºAµ½a£¬Bµ½b£¬Cµ½c£¬Dµ½d¡£
Ö÷Ñ»·ÓÐËÄÂÖ£¨MD4Ö»ÓÐÈýÂÖ£©£¬Ã¿ÂÖºÜÏàÄâ¡£µÚÒ»ÂÖ½øÐÐ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)=(X&Z)|(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£©£¬ <<<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)
ÕâËÄÂÖ£¨64²½£©ÊÇ£º
µÚÒ»ÂÖ
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)
µÚ¶þÂÖ
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)
µÚÈýÂÖ
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)
µÚËÄÂÖ
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)
³£Êýti¿ÉÒÔÈçÏÂÑ¡Ôñ£º
ÔÚµÚi²½ÖУ¬tiÊÇ4294967296*abs(sin(i))µÄÕûÊý²¿·Ö,iµÄµ¥Î»ÊÇ»¡¶È¡£
(2µÄ32´Î·½)
ËùÓÐÕâЩÍê³ÉÖ®ºó£¬½«A£¬B£¬C£¬D·Ö±ð¼ÓÉÏa£¬b£¬c£¬d¡£È»ºóÓÃÏÂÒ»·Ö×éÊý¾Ý¼ÌÐøÔËÐÐ
Ëã·¨£¬×îºóµÄÊä³öÊÇA£¬B£¬CºÍDµÄ¼¶Áª¡£
MD5µÄ°²È«ÐÔ
MD5Ïà¶ÔMD4Ëù×÷µÄ¸Ä½ø£º
1.Ôö¼ÓÁ˵ÚËÄÂÖ.
2.ÿһ²½¾ùÓÐΨһµÄ¼Ó·¨³£Êý.
3.Ϊ¼õÈõµÚ¶þÂÖÖк¯ÊýGµÄ¶Ô³ÆÐÔ´Ó(X&Y)|(X&Z)|(Y&Z)±äΪ(X&Z)|(Y&(~Z))
4.µÚÒ»²½¼ÓÉÏÁËÉÏÒ»²½µÄ½á¹û,Õ⽫ÒýÆð¸ü¿ìµÄÑ©±ÀЧӦ.
5.¸Ä±äÁ˵ڶþÂֺ͵ÚÈýÂÖÖзÃÎÊÏûÏ¢×Ó·Ö×éµÄ´ÎÐò,ʹÆä¸ü²»ÏàËÆ.
6.½üËÆÓÅ»¯ÁËÿһÂÖÖеÄÑ»·×óÒÆÎ»ÒÆÁ¿ÒÔʵÏÖ¸ü¿ìµÄÑ©±ÀЧӦ.¸÷ÂÖµÄÎ»ÒÆÁ¿»¥²»Ïà
ͬ.
¼ÓÁËcodeÅŰæÒ²Ã»Ó㬺¹¡£¡£¡£¡£×ÜÉÙЩ×Ö·û
Ò³:
[1]