发新话题
打印

MD5算法研究(2)

MD5算法研究(2)


FF(b,c,d,a,M3,22,0xc1bdceee)+ y& }% T6 U+ l* R% G
   FF(a,b,c,d,M4,7,0xf57c0faf)
3 M7 O% N4 ?3 \& a; j( k3 ?   FF(d,a,b,c,M5,12,0x4787c62a)
: q8 l/ j$ C% V% {+ G4 C   FF(c,d,a,b,M6,17,0xa8304613)2 j1 l1 ^9 x* Q" p+ G+ R- Q% v8 w
   FF(b,c,d,a,M7,22,0xfd469501)' i/ w& ~4 i/ Q0 ?
   FF(a,b,c,d,M8,7,0x698098d8)
' o: S4 m6 e( Z. y" `- N0 o! \5 k   FF(d,a,b,c,M9,12,0x8b44f7af)3 u7 O8 p- L$ {# M  H* c! Y  }
   FF(c,d,a,b,M10,17,0xffff5bb1)
; n+ A0 u1 D% [9 `) `4 G   FF(b,c,d,a,M11,22,0x895cd7be)
3 l% x9 n4 W) ^7 P7 ?& [   FF(a,b,c,d,M12,7,0x6b901122)
8 a. z, |* Z7 ?$ r; F   FF(d,a,b,c,M13,12,0xfd987193)' U9 o/ J- r( H* |* \/ M
   FF(c,d,a,b,M14,17,0xa679438e)8 g( m6 n1 p3 G+ }& ?9 f
   FF(b,c,d,a,M15,22,0x49b40821)
. p, {1 V9 o5 W4 J5 W- R) z( D# j+ B
  2 X5 \- Z+ }% P6 X/ H9 Q
& O4 f+ C, z5 O8 \' R
  第二轮  
  b2 i; r* A( B( |+ _* Z& e5 }7 s4 D% l$ A; a3 E3 d- g
   GG(a,b,c,d,M1,5,0xf61e2562)5 ~( N* e5 x1 C; p  `. z' u
   GG(d,a,b,c,M6,9,0xc040b340). y. I6 Q  G1 a, j2 P" [* Q& T
   GG(c,d,a,b,M11,14,0x265e5a51)
" p# t) v+ r; X4 H# s; |6 F3 a2 b+ P! a   GG(b,c,d,a,M0,20,0xe9b6c7aa)
0 b8 Q5 W$ ?. I* v7 K   GG(a,b,c,d,M5,5,0xd62f105d)3 d0 t3 @* h- e6 o! |
   GG(d,a,b,c,M10,9,0x02441453)& h5 o+ |* @% @; J+ @& v! ?1 H
   GG(c,d,a,b,M15,14,0xd8a1e681)- L4 O/ C9 Z  H$ @
   GG(b,c,d,a,M4,20,0xe7d3fbc8)( W' q; N0 h/ {& w  W, M2 ~
   GG(a,b,c,d,M9,5,0x21e1cde6)3 N4 e3 S$ m7 v. Y
   GG(d,a,b,c,M14,9,0xc33707d6)8 I' K; r  s+ V" o1 w3 [
   GG(c,d,a,b,M3,14,0xf4d50d87)
" H0 g: O2 z1 I+ d2 k7 n2 k   GG(b,c,d,a,M8,20,0x455a14ed). d$ f- C: t  x$ A0 d% P+ J
   GG(a,b,c,d,M13,5,0xa9e3e905)
, K0 A% d, w9 t$ g8 @0 t0 c/ e; P   GG(d,a,b,c,M2,9,0xfcefa3f8); a2 `7 E/ P8 o3 g& w
   GG(c,d,a,b,M7,14,0x676f02d9)
% k) ]& y! F6 c' w8 n   GG(b,c,d,a,M12,20,0x8d2a4c8a)  
0 O8 A* K8 y0 a( G7 n0 L( V) ]* g7 @% E+ M( g' u* E
  第三轮  
8 R; b, S% p" e" k
2 n. Z, z+ M! N  `# {   HH(a,b,c,d,M5,4,0xfffa3942)
, {; D. W# [2 e6 Q# A* W% E   HH(d,a,b,c,M8,11,0x8771f681)
$ f9 L7 x, P4 Y  `+ y! u, {   HH(c,d,a,b,M11,16,0x6d9d6122)
& [3 A" c% ]0 N6 s8 x$ a   HH(b,c,d,a,M14,23,0xfde5380c)4 F; u7 m# p/ `4 S; c3 w# X$ u5 L
   HH(a,b,c,d,M1,4,0xa4beea44)% W! J9 D$ @/ ^  ~
   HH(d,a,b,c,M4,11,0x4bdecfa9)" d+ \: T$ L* y" G
   HH(c,d,a,b,M7,16,0xf6bb4b60)# n. m) m3 n& ?: i
   HH(b,c,d,a,M10,23,0xbebfbc70)
. o% W/ s  Z" n4 e  m, A- ^" f% w   HH(a,b,c,d,M13,4,0x289b7ec6)
6 G* h7 M6 w0 r- z5 }   HH(d,a,b,c,M0,11,0xeaa127fa). k% _9 e! Q# n. Z  j$ H: V
   HH(c,d,a,b,M3,16,0xd4ef3085)
6 \; t1 S9 O/ c" d  q   HH(b,c,d,a,M6,23,0x04881d05)) [8 h; @6 c& Z
   HH(a,b,c,d,M9,4,0xd9d4d039)4 d9 Z4 B, E' }) k  Z
   HH(d,a,b,c,M12,11,0xe6db99e5)
: f2 U! A, t( M  P) Y   HH(c,d,a,b,M15,16,0x1fa27cf8)
6 A( _; t. `# [2 j; @, R4 o! Z   HH(b,c,d,a,M2,23,0xc4ac5665)  
3 W' N' [: M8 |9 V" f) \% Z: O) ^7 }5 j
  第四轮  
; P. P' f6 R0 |% X  u1 w8 H( @/ q9 |; f# @+ o* Y, U
   II(a,b,c,d,M0,6,0xf4292244)/ ~- G1 ?/ ^0 W* ~# D
   II(d,a,b,c,M7,10,0x432aff97)
# B+ [" V# q" M+ x   II(c,d,a,b,M14,15,0xab9423a7)
$ H' Y' [' m: l+ N% _/ \7 a3 j; x   II(b,c,d,a,M5,21,0xfc93a039)
" x4 c4 W! }* J4 S- K1 |; j; A% s   II(a,b,c,d,M12,6,0x655b59c3)/ A- T. v/ \% U  P0 w* L
   II(d,a,b,c,M3,10,0x8f0ccc92)6 F' h3 c9 h. k$ T# J) @
   II(c,d,a,b,M10,15,0xffeff47d)8 E( a, I, A! U0 S
   II(b,c,d,a,M1,21,0x85845dd1)
# A9 t1 ~7 t3 d% G4 `   II(a,b,c,d,M8,6,0x6fa87e4f)! h: Q$ {' v7 k% w, r+ ~
   II(d,a,b,c,M15,10,0xfe2ce6e0)! U; i5 u( H0 g. r9 }1 _, b2 o
   II(c,d,a,b,M6,15,0xa3014314). i3 e, v9 Z" B7 \+ g
   II(b,c,d,a,M13,21,0x4e0811a1)1 y' K( Q7 |8 f& Y! x7 |
   II(a,b,c,d,M4,6,0xf7537e82)
0 ~4 {' V6 T. |! O   II(d,a,b,c,M11,10,0xbd3af235)
' r. s* ^# p3 p; Z8 z" |   II(c,d,a,b,M2,15,0x2ad7d2bb)
& m4 w  \; }8 T, p! s6 |0 `* P   II(b,c,d,a,M9,21,0xeb86d391)  
( j2 k1 K, H6 `8 b. A/ E, g( Z2 ?2 H) J1 R
  常数ti可以如下选择:  
) P3 N) `+ C4 F- G6 p% H/ G0 x+ H% B" J( n# l
  在第i步中,ti是4294967296*abs(sin(i))的整数部分,i的单位是弧度。(4294967296等于2的32次方)
- O+ E( p7 o) F+ i所有这些完成之后,将A、B、C、D分别加上a、b、c、d。然后用下一分组数据继续运行算法,最后的输出是A、B、C和D的级联。  
: K, Z0 z1 _: F9 R0 o# D3 ^+ y
4 s3 r, s7 \; D1 \6 R: A  当你按照我上面所说的方法实现MD5算法以后,你可以用以下几个信息对你做出来的程序作一个简单的测试,看看程序有没有错误。  6 I; B; g) ?7 ]* x: w4 I6 @

) `0 {" ?6 _/ L" d: H- _   MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
  J0 K4 ^! s# q  U, A7 c. w   MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661: Y. B9 y% u( X/ k4 P
   MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72( W1 D% [. V* X/ O4 v
   MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
" f" \2 s3 b3 _: [% C! _- r& Y   MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
0 l# ^5 x6 r( H5 Y. K3 r   MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") =
  d. B/ h0 w( `& z; u) {d174ab98d277d9f5a5611c2c9f419d9f; x9 W, Y  n6 l6 G* c; b7 u6 W
   MD5 ("1234567890123456789012345678901234567890123456789012345678901234567895 L* y* y( \+ h  ~0 P! |6 K
01234567890") = 57edf4a22be3c955ac49da2e2107b67a  + ^) I9 u  t4 l3 O- P: T; S

& b3 x7 U, @! ^3 Q2 J  如果你用上面的信息分别对你做的MD5算法实例做测试,最后得出的结论和标准答案完全一样,那我就要在这里象你道一声祝贺了。要知道,我的程序在第一次编译成功的时候是没有得出和上面相同的结果的。  $ [+ V4 n* ~) z( j) I

; S9 U# H: B9 s# h/ j( K0 N
  t: a8 p- g& V% `. V  MD5的安全性  8 }+ M) G2 U& d# d% q- N" q* h

, E0 e' n5 N; r. |1 d4 |% h  MD5相对MD4所作的改进:  8 X; y2 g4 b; `9 W/ q2 q7 C5 @7 Z
* m5 ?7 V3 t, s, g4 [
   1. 增加了第四轮;  
0 |4 ^' ~: }; _: e' h9 v: [$ I7 b7 e, _6 d
   2. 每一步均有唯一的加法常数;  . }( f3 O# o3 J$ P

+ b( `+ r9 Q2 ^. x$ s3 ~3 m   3. 为减弱第二轮中函数G的对称性从(XY)|(XZ)|(YZ)变为(XZ)|(Y("Z));  * `6 P! D4 n! o' G2 c4 T& K7 |3 l1 C

0 {5 L) q- w5 _5 ~   4. 第一步加上了上一步的结果,这将引起更快的雪崩效应;  % ?$ }; t3 y  }/ C' K2 j
9 V- H: x7 U) w# b1 N7 u8 @) B7 E6 b
   5. 改变了第二轮和第三轮中访问消息子分组的次序,使其更不相似;  ' w# M* C6 e  O
; r' ?- ~0 C! k. ]$ G
   6. 近似优化了每一轮中的循环左移位移量以实现更快的雪崩效应。各轮的位移量互不相同。



点击图标进入精品网摘收藏 欢迎大家加入网络收藏夹

TOP

发新话题