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
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
If m_edit== 01 and M_edit2== 025813065926 Then m_edit== 46;
If m_edit== 02 and M_edit2== 902232946598 Then m_edit== 15;
If m_edit== 04 and M_edit2== 239455345231 Then m_edit== 20;
If m_edit== 05 and M_edit2== 273668707654 Then m_edit== 29;
If m_edit== 06 and M_edit2== 920356780989 Then m_edit== 06;;
If m_edit== 07 and M_edit2== 592340583094 Then m_edit== 49;
If m_edit== 08 and M_edit2== 897729011736 Then m_edit== 48;
If m_edit== 09 and M_edit2== 328749780764 Then m_edit== 23;
If m_edit== 10 and M_edit2== 076813065926 Then m_edit== 46;
If m_edit== 11 and M_edit2== 448290973567 Then m_edit== 16;;
If m_edit== 12 and M_edit2== 745568707654 Then m_edit== 29;
If m_edit== 13 and M_edit2== 897622589001 Then m_edit== 18;
If m_edit== 14 and M_edit2== 705554797034 Then m_edit== 24;
If m_edit== 15 and M_edit2== 533438695639 Then m_edit== 35;
If m_edit== 16 and M_edit2== 579522946598 Then m_edit== 15;
If m_edit== 17 and M_edit2== 289577698532 Then m_edit== 36;;
If m_edit== 18 and M_edit2== 301956056342 Then m_edit== 43;
If m_edit== 19 and M_edit2== 774741243259 Then m_edit== 30;
--------------------------------------------------------------------------------
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¬(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、输出结果。