# MD5 Generation - PowerPoint PPT Presentation

MD5 Generation

1 / 75
MD5 Generation

## MD5 Generation

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
##### Presentation Transcript

1. MD5 Generation Auto-Generated Slides To Visualize MD5 Hash Generation by Chris Fremgen

2. MD5 Hashing Summary MD5 is a function used in cryptography to ensure data integrity. The idea of hashing is to create a unique code for a set of data through the use of functions. It was created by Ronald Rivest in 1991 and each message digest is 128 bits long. You can find more details in RFC 1321. There are two main steps in generating an MD5 digest. Pre-processing of data, and hash generation.

3. MD5 Data Preprocessing Preprocessing: First we need two unsigned integer arrays with 64 items in each. Lets use 'r' for the rotational array and 'k' for the constant array r[ 0..15] := {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22} r[16..31] := {5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20} r[32..47] := {4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23} r[48..63] := {6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21} Use the following formula to generate the constants: for i from 0 to 63 k[i] := floor(abs(sin(i + 1)) × (2 pow 32)) We also need 4 constant variables to start bit shifting (these are arbitrary but need to be the same in all MD5 generators) var int h0 := 0x67452301 var int h1 := 0xEFCDAB89 var int h2 := 0x98BADCFE var int h3 := 0x10325476 Pre-processing the data is as follows: 1) Convert the data to a byte array 2) Append '1' bit to the data 3) Append '0' bits until message length in bits is 64 bits short of being a perfect multiple of 512 4) Append bit length of unpadded message as 64-bit little-endian integer to message The pre-processing of the data is done. Now we just run the data through the functions.

4. MD5 Pseudo code For each 512-bit chunk of message break chunk into sixteen 32-bit little-endian words w[i] for(i=0;i<15;i++) /* Initialize hash value for this chunk: (recall h0,h1,h2,h3 were declared as constants earlier) */ var int a := h0 var int b := h1 var int c := h2 var int d := h3 /* Main loop: */ /* Here are the logic functions that define this algorithm */ for i from 0 to 63 if 0 ≤ i ≤ 15 then f := (b and c) or ((not b) and d) g := i else if 16 ≤ i ≤ 31 f := (d and b) or ((not d) and c) g := (5×i + 1) mod 16 else if 32 ≤ i ≤ 47 f := b xor c xor d g := (3×i + 5) mod 16 else if 48 ≤ i ≤ 63 f := c xor (b or (not d)) g := (7×i) mod 16 temp := d d := c c := b b := b + leftrotate((a + f + k[i] + w[g]) , r[i]) a := temp h0 := h0 + a h1 := h1 + b h2 := h2 + c h3 := h3 + d After all rounds are complete, the message digest is h0 append h1 append h2 append h3

5. MD5 Generation From User Input User Input String: 'czvbbcvbz' User Input Bytes: 99 122 118 98 98 99 118 98 122

6. MD5 Generation From User Input After Pre-Processing of data, Message Bytes: 99 122 118 98 98 99 118 98 122 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 72 0 0 0 0 0 0 0 There will be 1 iteration(s) since the padded message size is 512 bits long

7. MD5 Generation Now we continue to crank through the 4 logic functions provided in the RFC Before we start the process the constant variables are as follows: h0: 1732584193 h1: 4023233417 h2: 2562383102 h3: 271733878

8. MD5 Generation Iteration 1: Step 1 a = d, d = c, c = b, b = previous resulting value a: (1732584193)01100111010001010010001100000001 b: (4023233417)11101111110011011010101110001001 c: (2562383102)10011000101110101101110011111110 d: (271733878)00010000001100100101010001110110 Data Block: (1651931747)01100010011101100111101001100011 R Constant: (7)00000000000000000000000000000111 Sin Value: (3614090360)11010111011010101010010001111000 Logic Function: (1732584193)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (3764197541)11100000010111010001100010100101

9. MD5 Generation Iteration 1: Step 2 a = d, d = c, c = b, b = previous resulting value a: (271733878)00010000001100100101010001110110 b: (3764197541)11100000010111010001100010100101 c: (4023233417)11101111110011011010101110001001 d: (2562383102)10011000101110101101110011111110 Data Block: (1651925858)01100010011101100110001101100010 R Constant: (12)00000000000000000000000000001100 Sin Value: (3905402710)11101000110001111011011101010110 Logic Function: (271733878)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (3827150315)11100100000111011010110111101011

10. MD5 Generation Iteration 1: Step 3 a = d, d = c, c = b, b = previous resulting value a: (2562383102)10011000101110101101110011111110 b: (3827150315)11100100000111011010110111101011 c: (3764197541)11100000010111010001100010100101 d: (4023233417)11101111110011011010101110001001 Data Block: (32890)00000000000000001000000001111010 R Constant: (17)00000000000000000000000000010001 Sin Value: (606105819)00100100001000000111000011011011 Logic Function: (2562383102)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (2517040988)10010110000001101111111101011100

11. MD5 Generation Iteration 1: Step 4 a = d, d = c, c = b, b = previous resulting value a: (4023233417)11101111110011011010101110001001 b: (2517040988)10010110000001101111111101011100 c: (3827150315)11100100000111011010110111101011 d: (3764197541)11100000010111010001100010100101 Data Block: (0)00000000000000000000000000000000 R Constant: (22)00000000000000000000000000010110 Sin Value: (3250441966)11000001101111011100111011101110 Logic Function: (4023233417)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (2922150310)10101110001011000111100110100110

12. MD5 Generation Iteration 1: Step 5 a = d, d = c, c = b, b = previous resulting value a: (3764197541)11100000010111010001100010100101 b: (2922150310)10101110001011000111100110100110 c: (2517040988)10010110000001101111111101011100 d: (3827150315)11100100000111011010110111101011 Data Block: (0)00000000000000000000000000000000 R Constant: (7)00000000000000000000000000000111 Sin Value: (4118548399)11110101011111000000111110101111 Logic Function: (3764197541)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (2780777075)10100101101111110100101001110011

13. MD5 Generation Iteration 1: Step 6 a = d, d = c, c = b, b = previous resulting value a: (3827150315)11100100000111011010110111101011 b: (2780777075)10100101101111110100101001110011 c: (2922150310)10101110001011000111100110100110 d: (2517040988)10010110000001101111111101011100 Data Block: (0)00000000000000000000000000000000 R Constant: (12)00000000000000000000000000001100 Sin Value: (1200080426)01000111100001111100011000101010 Logic Function: (3827150315)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (3436415120)11001100110100111000100010010000

14. MD5 Generation Iteration 1: Step 7 a = d, d = c, c = b, b = previous resulting value a: (2517040988)10010110000001101111111101011100 b: (3436415120)11001100110100111000100010010000 c: (2780777075)10100101101111110100101001110011 d: (2922150310)10101110001011000111100110100110 Data Block: (0)00000000000000000000000000000000 R Constant: (17)00000000000000000000000000010001 Sin Value: (2821735955)10101000001100000100011000010011 Logic Function: (2517040988)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (1243566717)01001010000111110101001001111101

15. MD5 Generation Iteration 1: Step 8 a = d, d = c, c = b, b = previous resulting value a: (2922150310)10101110001011000111100110100110 b: (1243566717)01001010000111110101001001111101 c: (3436415120)11001100110100111000100010010000 d: (2780777075)10100101101111110100101001110011 Data Block: (0)00000000000000000000000000000000 R Constant: (22)00000000000000000000000000010110 Sin Value: (4249261313)11111101010001101001010100000001 Logic Function: (2922150310)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (4169505794)11111000100001011001110000000010

16. MD5 Generation Iteration 1: Step 9 a = d, d = c, c = b, b = previous resulting value a: (2780777075)10100101101111110100101001110011 b: (4169505794)11111000100001011001110000000010 c: (1243566717)01001010000111110101001001111101 d: (3436415120)11001100110100111000100010010000 Data Block: (0)00000000000000000000000000000000 R Constant: (7)00000000000000000000000000000111 Sin Value: (1770035416)01101001100000001001100011011000 Logic Function: (2780777075)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (3288304047)11000011111111111000100110101111

17. MD5 Generation Iteration 1: Step 10 a = d, d = c, c = b, b = previous resulting value a: (3436415120)11001100110100111000100010010000 b: (3288304047)11000011111111111000100110101111 c: (4169505794)11111000100001011001110000000010 d: (1243566717)01001010000111110101001001111101 Data Block: (0)00000000000000000000000000000000 R Constant: (12)00000000000000000000000000001100 Sin Value: (2336552879)10001011010001001111011110101111 Logic Function: (3436415120)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (2846399416)10101001101010001001101110111000

18. MD5 Generation Iteration 1: Step 11 a = d, d = c, c = b, b = previous resulting value a: (1243566717)01001010000111110101001001111101 b: (2846399416)10101001101010001001101110111000 c: (3288304047)11000011111111111000100110101111 d: (4169505794)11111000100001011001110000000010 Data Block: (0)00000000000000000000000000000000 R Constant: (17)00000000000000000000000000010001 Sin Value: (4294925233)11111111111111110101101110110001 Logic Function: (1243566717)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (559469392)00100001010110001101001101010000

19. MD5 Generation Iteration 1: Step 12 a = d, d = c, c = b, b = previous resulting value a: (4169505794)11111000100001011001110000000010 b: (559469392)00100001010110001101001101010000 c: (2846399416)10101001101010001001101110111000 d: (3288304047)11000011111111111000100110101111 Data Block: (0)00000000000000000000000000000000 R Constant: (22)00000000000000000000000000010110 Sin Value: (2304563134)10001001010111001101011110111110 Logic Function: (4169505794)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (20068307)00000001001100100011011111010011

20. MD5 Generation Iteration 1: Step 13 a = d, d = c, c = b, b = previous resulting value a: (3288304047)11000011111111111000100110101111 b: (20068307)00000001001100100011011111010011 c: (559469392)00100001010110001101001101010000 d: (2846399416)10101001101010001001101110111000 Data Block: (0)00000000000000000000000000000000 R Constant: (7)00000000000000000000000000000111 Sin Value: (1804603682)01101011100100000001000100100010 Logic Function: (3288304047)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (2504875199)10010101010011010101110010111111

21. MD5 Generation Iteration 1: Step 14 a = d, d = c, c = b, b = previous resulting value a: (2846399416)10101001101010001001101110111000 b: (2504875199)10010101010011010101110010111111 c: (20068307)00000001001100100011011111010011 d: (559469392)00100001010110001101001101010000 Data Block: (0)00000000000000000000000000000000 R Constant: (12)00000000000000000000000000001100 Sin Value: (4254626195)11111101100110000111000110010011 Logic Function: (2846399416)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (2946451780)10101111100111110100100101000100

22. MD5 Generation Iteration 1: Step 15 a = d, d = c, c = b, b = previous resulting value a: (559469392)00100001010110001101001101010000 b: (2946451780)10101111100111110100100101000100 c: (2504875199)10010101010011010101110010111111 d: (20068307)00000001001100100011011111010011 Data Block: (72)00000000000000000000000001001000 R Constant: (17)00000000000000000000000000010001 Sin Value: (2792965006)10100110011110010100001110001110 Logic Function: (559469392)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (3675906883)11011011000110011110001101000011

23. MD5 Generation Iteration 1: Step 16 a = d, d = c, c = b, b = previous resulting value a: (20068307)00000001001100100011011111010011 b: (3675906883)11011011000110011110001101000011 c: (2946451780)10101111100111110100100101000100 d: (2504875199)10010101010011010101110010111111 Data Block: (0)00000000000000000000000000000000 R Constant: (22)00000000000000000000000000010110 Sin Value: (1236535329)01001001101101000000100000100001 Logic Function: (20068307)int result = b + RotateLeft((a +(b & c) | (~b & d)) + DataBlock + SinValue), R Constant) Result after shifting: (1464890410)01010111010100000111010000101010

24. MD5 Generation Iteration 1: Step 17 a = d, d = c, c = b, b = previous resulting value a: (2504875199)10010101010011010101110010111111 b: (1464890410)01010111010100000111010000101010 c: (3675906883)11011011000110011110001101000011 d: (2946451780)10101111100111110100100101000100 Data Block: (1651925858)01100010011101100110001101100010 R Constant: (5)00000000000000000000000000000101 Sin Value: (4129170786)11110110000111100010010101100010 Logic Function: (2504875199)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (4121519346)11110101101010010110010011110010

25. MD5 Generation Iteration 1: Step 18 a = d, d = c, c = b, b = previous resulting value a: (2946451780)10101111100111110100100101000100 b: (4121519346)11110101101010010110010011110010 c: (1464890410)01010111010100000111010000101010 d: (3675906883)11011011000110011110001101000011 Data Block: (0)00000000000000000000000000000000 R Constant: (9)00000000000000000000000000001001 Sin Value: (3225465664)11000000010000001011001101000000 Logic Function: (2946451780)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (1217085820)01001000100010110100000101111100

26. MD5 Generation Iteration 1: Step 19 a = d, d = c, c = b, b = previous resulting value a: (3675906883)11011011000110011110001101000011 b: (1217085820)01001000100010110100000101111100 c: (4121519346)11110101101010010110010011110010 d: (1464890410)01010111010100000111010000101010 Data Block: (0)00000000000000000000000000000000 R Constant: (14)00000000000000000000000000001110 Sin Value: (643717713)00100110010111100101101001010001 Logic Function: (3675906883)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (2821618180)10101000001011100111101000000100

27. MD5 Generation Iteration 1: Step 20 a = d, d = c, c = b, b = previous resulting value a: (1464890410)01010111010100000111010000101010 b: (2821618180)10101000001011100111101000000100 c: (1217085820)01001000100010110100000101111100 d: (4121519346)11110101101010010110010011110010 Data Block: (1651931747)01100010011101100111101001100011 R Constant: (20)00000000000000000000000000010100 Sin Value: (3921069994)11101001101101101100011110101010 Logic Function: (1464890410)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (476263557)00011100011000110011010010000101

28. MD5 Generation Iteration 1: Step 21 a = d, d = c, c = b, b = previous resulting value a: (4121519346)11110101101010010110010011110010 b: (476263557)00011100011000110011010010000101 c: (2821618180)10101000001011100111101000000100 d: (1217085820)01001000100010110100000101111100 Data Block: (0)00000000000000000000000000000000 R Constant: (5)00000000000000000000000000000101 Sin Value: (3593408605)11010110001011110001000001011101 Logic Function: (4121519346)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (2623086323)10011100010110010001111011110011

29. MD5 Generation Iteration 1: Step 22 a = d, d = c, c = b, b = previous resulting value a: (1217085820)01001000100010110100000101111100 b: (2623086323)10011100010110010001111011110011 c: (476263557)00011100011000110011010010000101 d: (2821618180)10101000001011100111101000000100 Data Block: (0)00000000000000000000000000000000 R Constant: (9)00000000000000000000000000001001 Sin Value: (38016083)00000010010001000001010001010011 Logic Function: (1217085820)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (3443638465)11001101010000011100000011000001

30. MD5 Generation Iteration 1: Step 23 a = d, d = c, c = b, b = previous resulting value a: (2821618180)10101000001011100111101000000100 b: (3443638465)11001101010000011100000011000001 c: (2623086323)10011100010110010001111011110011 d: (476263557)00011100011000110011010010000101 Data Block: (0)00000000000000000000000000000000 R Constant: (14)00000000000000000000000000001110 Sin Value: (3634488961)11011000101000011110011010000001 Logic Function: (2821618180)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (673170443)00101000000111111100010000001011

31. MD5 Generation Iteration 1: Step 24 a = d, d = c, c = b, b = previous resulting value a: (476263557)00011100011000110011010010000101 b: (673170443)00101000000111111100010000001011 c: (3443638465)11001101010000011100000011000001 d: (2623086323)10011100010110010001111011110011 Data Block: (0)00000000000000000000000000000000 R Constant: (20)00000000000000000000000000010100 Sin Value: (3889429448)11100111110100111111101111001000 Logic Function: (476263557)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (1831115034)01101101001001001001100100011010

32. MD5 Generation Iteration 1: Step 25 a = d, d = c, c = b, b = previous resulting value a: (2623086323)10011100010110010001111011110011 b: (1831115034)01101101001001001001100100011010 c: (673170443)00101000000111111100010000001011 d: (3443638465)11001101010000011100000011000001 Data Block: (0)00000000000000000000000000000000 R Constant: (5)00000000000000000000000000000101 Sin Value: (568446438)00100001111000011100110111100110 Logic Function: (2623086323)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (3629299071)11011000010100101011010101111111

33. MD5 Generation Iteration 1: Step 26 a = d, d = c, c = b, b = previous resulting value a: (3443638465)11001101010000011100000011000001 b: (3629299071)11011000010100101011010101111111 c: (1831115034)01101101001001001001100100011010 d: (673170443)00101000000111111100010000001011 Data Block: (72)00000000000000000000000001001000 R Constant: (9)00000000000000000000000000001001 Sin Value: (3275163606)11000011001101110000011111010110 Logic Function: (3443638465)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (790539066)00101111000111101010101100111010

34. MD5 Generation Iteration 1: Step 27 a = d, d = c, c = b, b = previous resulting value a: (673170443)00101000000111111100010000001011 b: (790539066)00101111000111101010101100111010 c: (3629299071)11011000010100101011010101111111 d: (1831115034)01101101001001001001100100011010 Data Block: (0)00000000000000000000000000000000 R Constant: (14)00000000000000000000000000001110 Sin Value: (4107603335)11110100110101010000110110000111 Logic Function: (673170443)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (249766348)00001110111000110010000111001100

35. MD5 Generation Iteration 1: Step 28 a = d, d = c, c = b, b = previous resulting value a: (1831115034)01101101001001001001100100011010 b: (249766348)00001110111000110010000111001100 c: (790539066)00101111000111101010101100111010 d: (3629299071)11011000010100101011010101111111 Data Block: (0)00000000000000000000000000000000 R Constant: (20)00000000000000000000000000010100 Sin Value: (1163531501)01000101010110100001010011101101 Logic Function: (1831115034)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (2753642137)10100100001000010011111010011001

36. MD5 Generation Iteration 1: Step 29 a = d, d = c, c = b, b = previous resulting value a: (3629299071)11011000010100101011010101111111 b: (2753642137)10100100001000010011111010011001 c: (249766348)00001110111000110010000111001100 d: (790539066)00101111000111101010101100111010 Data Block: (0)00000000000000000000000000000000 R Constant: (5)00000000000000000000000000000101 Sin Value: (2850285829)10101001111000111110100100000101 Logic Function: (3629299071)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (2266655405)10000111000110100110101010101101

37. MD5 Generation Iteration 1: Step 30 a = d, d = c, c = b, b = previous resulting value a: (790539066)00101111000111101010101100111010 b: (2266655405)10000111000110100110101010101101 c: (2753642137)10100100001000010011111010011001 d: (249766348)00001110111000110010000111001100 Data Block: (32890)00000000000000001000000001111010 R Constant: (9)00000000000000000000000000001001 Sin Value: (4243563512)11111100111011111010001111111000 Logic Function: (790539066)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (2838953553)10101001001101101111111001010001

38. MD5 Generation Iteration 1: Step 31 a = d, d = c, c = b, b = previous resulting value a: (249766348)00001110111000110010000111001100 b: (2838953553)10101001001101101111111001010001 c: (2266655405)10000111000110100110101010101101 d: (2753642137)10100100001000010011111010011001 Data Block: (0)00000000000000000000000000000000 R Constant: (14)00000000000000000000000000001110 Sin Value: (1735328473)01100111011011110000001011011001 Logic Function: (249766348)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (3522004148)11010001111011011000010010110100

39. MD5 Generation Iteration 1: Step 32 a = d, d = c, c = b, b = previous resulting value a: (2753642137)10100100001000010011111010011001 b: (3522004148)11010001111011011000010010110100 c: (2838953553)10101001001101101111111001010001 d: (2266655405)10000111000110100110101010101101 Data Block: (0)00000000000000000000000000000000 R Constant: (20)00000000000000000000000000010100 Sin Value: (2368359562)10001101001010100100110010001010 Logic Function: (2753642137)int result = b + RotateLeft((a + ((b & d) | (c & ~d)) + DataBlock + SinValue), R Constant) Result after shifting: (3547016246)11010011011010110010110000110110

40. MD5 Generation Iteration 1: Step 33 a = d, d = c, c = b, b = previous resulting value a: (2266655405)10000111000110100110101010101101 b: (3547016246)11010011011010110010110000110110 c: (3522004148)11010001111011011000010010110100 d: (2838953553)10101001001101101111111001010001 Data Block: (0)00000000000000000000000000000000 R Constant: (4)00000000000000000000000000000100 Sin Value: (4294588738)11111111111110100011100101000010 Logic Function: (2266655405)int result = b + RotateLeft((a + (b ^ c ^ d) + DataBlock + SinValue), R Constant) Result after shifting: (4290435161)11111111101110101101100001011001

41. MD5 Generation Iteration 1: Step 34 a = d, d = c, c = b, b = previous resulting value a: (2838953553)10101001001101101111111001010001 b: (4290435161)11111111101110101101100001011001 c: (3547016246)11010011011010110010110000110110 d: (3522004148)11010001111011011000010010110100 Data Block: (0)00000000000000000000000000000000 R Constant: (11)00000000000000000000000000001011 Sin Value: (2272392833)10000111011100011111011010000001 Logic Function: (2838953553)int result = b + RotateLeft((a + (b ^ c ^ d) + DataBlock + SinValue), R Constant) Result after shifting: (719864264)00101010111010000100000111001000

42. MD5 Generation Iteration 1: Step 35 a = d, d = c, c = b, b = previous resulting value a: (3522004148)11010001111011011000010010110100 b: (719864264)00101010111010000100000111001000 c: (4290435161)11111111101110101101100001011001 d: (3547016246)11010011011010110010110000110110 Data Block: (0)00000000000000000000000000000000 R Constant: (16)00000000000000000000000000010000 Sin Value: (1839030562)01101101100111010110000100100010 Logic Function: (3522004148)int result = b + RotateLeft((a + (b ^ c ^ d) + DataBlock + SinValue), R Constant) Result after shifting: (3328542604)11000110011001011000011110001100

43. MD5 Generation Iteration 1: Step 36 a = d, d = c, c = b, b = previous resulting value a: (3547016246)11010011011010110010110000110110 b: (3328542604)11000110011001011000011110001100 c: (719864264)00101010111010000100000111001000 d: (4290435161)11111111101110101101100001011001 Data Block: (72)00000000000000000000000001001000 R Constant: (23)00000000000000000000000000010111 Sin Value: (4259657740)11111101111001010011100000001100 Logic Function: (3547016246)int result = b + RotateLeft((a + (b ^ c ^ d) + DataBlock + SinValue), R Constant) Result after shifting: (441961293)00011010010101111100101101001101

44. MD5 Generation Iteration 1: Step 37 a = d, d = c, c = b, b = previous resulting value a: (4290435161)11111111101110101101100001011001 b: (441961293)00011010010101111100101101001101 c: (3328542604)11000110011001011000011110001100 d: (719864264)00101010111010000100000111001000 Data Block: (1651925858)01100010011101100110001101100010 R Constant: (4)00000000000000000000000000000100 Sin Value: (2763975236)10100100101111101110101001000100 Logic Function: (4290435161)int result = b + RotateLeft((a + (b ^ c ^ d) + DataBlock + SinValue), R Constant) Result after shifting: (4143643612)11110110111110101111101111011100

45. MD5 Generation Iteration 1: Step 38 a = d, d = c, c = b, b = previous resulting value a: (719864264)00101010111010000100000111001000 b: (4143643612)11110110111110101111101111011100 c: (441961293)00011010010101111100101101001101 d: (3328542604)11000110011001011000011110001100 Data Block: (0)00000000000000000000000000000000 R Constant: (11)00000000000000000000000000001011 Sin Value: (1272893353)01001011110111101100111110101001 Logic Function: (719864264)int result = b + RotateLeft((a + (b ^ c ^ d) + DataBlock + SinValue), R Constant) Result after shifting: (1967091944)01110101001111110111000011101000

46. MD5 Generation Iteration 1: Step 39 a = d, d = c, c = b, b = previous resulting value a: (3328542604)11000110011001011000011110001100 b: (1967091944)01110101001111110111000011101000 c: (4143643612)11110110111110101111101111011100 d: (441961293)00011010010101111100101101001101 Data Block: (0)00000000000000000000000000000000 R Constant: (16)00000000000000000000000000010000 Sin Value: (4139469664)11110110101110110100101101100000 Logic Function: (3328542604)int result = b + RotateLeft((a + (b ^ c ^ d) + DataBlock + SinValue), R Constant) Result after shifting: (2292500379)10001000101001001100011110011011

47. MD5 Generation Iteration 1: Step 40 a = d, d = c, c = b, b = previous resulting value a: (441961293)00011010010101111100101101001101 b: (2292500379)10001000101001001100011110011011 c: (1967091944)01110101001111110111000011101000 d: (4143643612)11110110111110101111101111011100 Data Block: (0)00000000000000000000000000000000 R Constant: (23)00000000000000000000000000010111 Sin Value: (3200236656)10111110101111111011110001110000 Logic Function: (441961293)int result = b + RotateLeft((a + (b ^ c ^ d) + DataBlock + SinValue), R Constant) Result after shifting: (3205956613)10111111000101110000010000000101

48. MD5 Generation Iteration 1: Step 41 a = d, d = c, c = b, b = previous resulting value a: (4143643612)11110110111110101111101111011100 b: (3205956613)10111111000101110000010000000101 c: (2292500379)10001000101001001100011110011011 d: (1967091944)01110101001111110111000011101000 Data Block: (0)00000000000000000000000000000000 R Constant: (4)00000000000000000000000000000100 Sin Value: (681279174)00101000100110110111111011000110 Logic Function: (4143643612)int result = b + RotateLeft((a + (b ^ c ^ d) + DataBlock + SinValue), R Constant) Result after shifting: (3779716491)11100001010010011110010110001011

49. MD5 Generation Iteration 1: Step 42 a = d, d = c, c = b, b = previous resulting value a: (1967091944)01110101001111110111000011101000 b: (3779716491)11100001010010011110010110001011 c: (3205956613)10111111000101110000010000000101 d: (2292500379)10001000101001001100011110011011 Data Block: (1651931747)01100010011101100111101001100011 R Constant: (11)00000000000000000000000000001011 Sin Value: (3936430074)11101010101000010010011111111010 Logic Function: (1967091944)int result = b + RotateLeft((a + (b ^ c ^ d) + DataBlock + SinValue), R Constant) Result after shifting: (1796520533)01101011000101001011101001010101

50. MD5 Generation Iteration 1: Step 43 a = d, d = c, c = b, b = previous resulting value a: (2292500379)10001000101001001100011110011011 b: (1796520533)01101011000101001011101001010101 c: (3779716491)11100001010010011110010110001011 d: (3205956613)10111111000101110000010000000101 Data Block: (0)00000000000000000000000000000000 R Constant: (16)00000000000000000000000000010000 Sin Value: (3572445317)11010100111011110011000010000101 Logic Function: (2292500379)int result = b + RotateLeft((a + (b ^ c ^ d) + DataBlock + SinValue), R Constant) Result after shifting: (3205516595)10111111000100000100110100110011