11.04.2013 Views

FAQ MD5 Hash

FAQ MD5 Hash

FAQ MD5 Hash

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

REXX- <strong>MD5</strong>-Procedure<br />

/* REXX */<br />

RETURN <strong>MD5</strong>(ARG(1))<br />

/* --- */<br />

<strong>MD5</strong> : procedure /* for <strong>MD5</strong> details see RfC 1321 */<br />

numeric digits 11 /* 32 bit addition + carry digit */<br />

parse arg MSG /* if MSG < 12,500,000,000 bytes */<br />

LEN = 8 * length( MSG ) /* <strong>MD5</strong> operates on bit messages: */<br />

PAD = LEN // 512 /* pad to length 448 modulo 512 */<br />

if PAD < 448 then PAD = 448 - PAD<br />

else PAD = 960 - PAD<br />

PAD = left( '80'x, PAD / 8, '00'x )<br />

MSG = MSG !! PAD !! reverse( x2c( d2x( LEN, 16 )))<br />

A = '67452301'x ;<br />

C = '98BADCFE'x ;<br />

S11 = 7 ; S12 = 12 ;<br />

S21 = 5 ; S22 = 9 ;<br />

S31 = 4 ; S32 = 11 ;<br />

S41 = 6 ; S42 = 10 ;<br />

B = 'EFCDAB89'x<br />

D = '10325476'x<br />

S13 = 17 ; S14 = 22<br />

S23 = 14 ; S24 = 20<br />

S33 = 16 ; S34 = 23<br />

S43 = 15 ; S44 = 21<br />

do N = 1 to ( length( MSG ) / 4 ) / 16<br />

K = N * 64 - 63<br />

do J = 0 to 15<br />

M.J = c2d( reverse( substr( MSG, K + J * 4, 4 )))<br />

end J<br />

AA = A ; BB = B ; CC = C ; DD = D<br />

A = <strong>MD5</strong>.1( A, B, C, D, S11, M.0 + 3614090360 ) /* 1 */<br />

D = <strong>MD5</strong>.1( D, A, B, C, S12, M.1 + 3905402710 ) /* 2 */<br />

C = <strong>MD5</strong>.1( C, D, A, B, S13, M.2 + 606105819 ) /* 3 */<br />

B = <strong>MD5</strong>.1( B, C, D, A, S14, M.3 + 3250441966 ) /* 4 */<br />

A = <strong>MD5</strong>.1( A, B, C, D, S11, M.4 + 4118548399 ) /* 5 */<br />

D = <strong>MD5</strong>.1( D, A, B, C, S12, M.5 + 1200080426 ) /* 6 */<br />

C = <strong>MD5</strong>.1( C, D, A, B, S13, M.6 + 2821735955 ) /* 7 */<br />

B = <strong>MD5</strong>.1( B, C, D, A, S14, M.7 + 4249261313 ) /* 8 */<br />

A = <strong>MD5</strong>.1( A, B, C, D, S11, M.8 + 1770035416 ) /* 9 */<br />

D = <strong>MD5</strong>.1( D, A, B, C, S12, M.9 + 2336552879 ) /* 10 */<br />

C = <strong>MD5</strong>.1( C, D, A, B, S13, M.10+ 4294925233 ) /* 11 */<br />

B = <strong>MD5</strong>.1( B, C, D, A, S14, M.11+ 2304563134 ) /* 12 */<br />

A = <strong>MD5</strong>.1( A, B, C, D, S11, M.12+ 1804603682 ) /* 13 */<br />

D = <strong>MD5</strong>.1( D, A, B, C, S12, M.13+ 4254626195 ) /* 14 */<br />

C = <strong>MD5</strong>.1( C, D, A, B, S13, M.14+ 2792965006 ) /* 15 */<br />

B = <strong>MD5</strong>.1( B, C, D, A, S14, M.15+ 1236535329 ) /* 16 */<br />

A = <strong>MD5</strong>.2( A, B, C, D, S21, M.1 + 4129170786 ) /* 17 */<br />

D = <strong>MD5</strong>.2( D, A, B, C, S22, M.6 + 3225465664 ) /* 18 */<br />

C = <strong>MD5</strong>.2( C, D, A, B, S23, M.11+ 643717713 ) /* 19 */<br />

B = <strong>MD5</strong>.2( B, C, D, A, S24, M.0 + 3921069994 ) /* 20 */<br />

A = <strong>MD5</strong>.2( A, B, C, D, S21, M.5 + 3593408605 ) /* 21 */<br />

D = <strong>MD5</strong>.2( D, A, B, C, S22, M.10+ 38016083 ) /* 22 */<br />

C = <strong>MD5</strong>.2( C, D, A, B, S23, M.15+ 3634488961 ) /* 23 */<br />

B = <strong>MD5</strong>.2( B, C, D, A, S24, M.4 + 3889429448 ) /* 24 */<br />

A = <strong>MD5</strong>.2( A, B, C, D, S21, M.9 + 568446438 ) /* 25 */<br />

D = <strong>MD5</strong>.2( D, A, B, C, S22, M.14+ 3275163606 ) /* 26 */<br />

C = <strong>MD5</strong>.2( C, D, A, B, S23, M.3 + 4107603335 ) /* 27 */<br />

B = <strong>MD5</strong>.2( B, C, D, A, S24, M.8 + 1163531501 ) /* 28 */<br />

A = <strong>MD5</strong>.2( A, B, C, D, S21, M.13+ 2850285829 ) /* 29 */<br />

D = <strong>MD5</strong>.2( D, A, B, C, S22, M.2 + 4243563512 ) /* 30 */<br />

C = <strong>MD5</strong>.2( C, D, A, B, S23, M.7 + 1735328473 ) /* 31 */<br />

B = <strong>MD5</strong>.2( B, C, D, A, S24, M.12+ 2368359562 ) /* 32 */<br />

A = <strong>MD5</strong>.3( A, B, C, D, S31, M.5 + 4294588738 ) /* 33 */<br />

D = <strong>MD5</strong>.3( D, A, B, C, S32, M.8 + 2272392833 ) /* 34 */<br />

C = <strong>MD5</strong>.3( C, D, A, B, S33, M.11+ 1839030562 ) /* 35 */<br />

B = <strong>MD5</strong>.3( B, C, D, A, S34, M.14+ 4259657740 ) /* 36 */<br />

A = <strong>MD5</strong>.3( A, B, C, D, S31, M.1 + 2763975236 ) /* 37 */<br />

D = <strong>MD5</strong>.3( D, A, B, C, S32, M.4 + 1272893353 ) /* 38 */<br />

C = <strong>MD5</strong>.3( C, D, A, B, S33, M.7 + 4139469664 ) /* 39 */<br />

B = <strong>MD5</strong>.3( B, C, D, A, S34, M.10+ 3200236656 ) /* 40 */<br />

A = <strong>MD5</strong>.3( A, B, C, D, S31, M.13+ 681279174 ) /* 41 */

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!