01        025813065926      46 
02        902232946598      15 
04        239455345231      20 
05        273668707654      29
06        920356780989      06
07        592340583094      49
08        897729011736      48
09        328749780764      23
10        076813065926      46
11        448290973567      16
12        745568707654      29
13        897622589001      18
14        705554797034      24
15        533438695639      35
16        579522946598      15
17        289577698532      36
18        301956056342      43 
19        774741243259      30 

解决方案 »

  1.   

    用SOFT-ICE跟踪吧,只有结果是不可能知道算法的。
      

  2.   

    MD5算法说明
     --------------------------------------------------------------------------------
     
    1、MD5算法是对输入的数据进行补位,使得如果数据位长度LEN对512求余的结果是448。
    即数据扩展至K*512+448位。即K*64+56个字节,K为整数。
    具体补位操作:补一个1,然后补0至满足上述要求2、补数据长度:
    用一个64位的数字表示数据的原始长度B,把B用两个32位数表示。这时,数据就被填
    补成长度为512位的倍数。3. 初始化MD5参数
    四个32位整数 (A,B,C,D) 用来计算信息摘要,初始化使用的是十六进制表示的数字A=0X01234567
    B=0X89abcdef
    C=0Xfedcba98
    D=0X765432104、处理位操作函数X,Y,Z为32位整数。
    F(X,Y,Z) = X&Y|NOT(X)&Z
    G(X,Y,Z) = X&Z|Y&not(Z)
    H(X,Y,Z) = X xor Y xor Z
    I(X,Y,Z) = Y xor (X|not(Z))5、主要变换过程:
    使用常数组T[1 ... 64], T[i]为32位整数用16进制表示,数据用16个32位的整
    数数组M[]表示。具体过程如下:/* 处理数据原文 */
    For i = 0 to N/16-1 do/*每一次,把数据原文存放在16个元素的数组X中. */
    For j = 0 to 15 do
    Set X[j] to M[i*16+j].
    end /结束对J的循环/* Save A as AA, B as BB, C as CC, and D as DD. */
    AA = A
    BB = B
    CC = C
    DD = D/* 第1轮*/
    /* 以 [abcd k s i]表示如下操作
    a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). *//* Do the following 16 operations. */
    [ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
    [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
    [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
    [ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]/* 第2轮* */
    /* 以 [abcd k s i]表示如下操作
    a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
    /* Do the following 16 operations. */
    [ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
    [ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
    [ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
    [ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]/* 第3轮*/
    /* 以 [abcd k s i]表示如下操作
    a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
    /* Do the following 16 operations. */
    [ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
    [ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
    [ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
    [ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]/* 第4轮*/
    /* 以 [abcd k s i]表示如下操作
    a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
    /* Do the following 16 operations. */
    [ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
    [ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
    [ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
    [ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]/* 然后进行如下操作 */
    A = A + AA
    B = B + BB
    C = C + CC
    D = D + DDend /* 结束对I的循环*/
    6、输出结果。