void
CMFCApplication1Dlg::InitMagic()
{
magic[0] = 0x67452301;
magic[1] = 0xEFCDAB89;
magic[2] = 0x98BADCFE;
magic[3] = 0x10325476;
DWORD
temp1[]=
{0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821};
DWORD
temp2[]= {
0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a };
DWORD
temp3[]= {
0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665 };
DWORD
temp4[]= {
0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 };
memcpy
(ti1, temp1,
sizeof
(ti1));
memcpy
(ti2, temp2,
sizeof
(ti2));
memcpy
(ti3, temp3,
sizeof
(ti4));
memcpy
(ti4, temp4,
sizeof
(ti4));
}
void
CMFCApplication1Dlg::Name_md5(
char
*name)
{
DWORD
A = magic[0];
DWORD
B = magic[1];
DWORD
C = magic[2];
DWORD
D = magic[3];
for
(
DWORD
i = 0; i < 0x10; i+=0x4)
{
DWORD
a = rol(*(
DWORD
*)(name+i*4) +
(C & B | D & ~B) + ti1[i] + A,7);
A = B + a;
DWORD
b=rol(*(
DWORD
*)(name + (i + 1) * 4) +
(A & B | C & ~A) + ti1[i + 1] + D, 12);
D = A + b;
DWORD
c = rol(*(
DWORD
*)(name + (i + 2) * 4) +
(D & A | B & ~D)+ti1[i+2]+C, 17);
C = D + c;
DWORD
d = rol(*(
DWORD
*)(name + (i + 3) * 4)+
(D & C | A & ~C) + ti1[i + 3] + B, 22);
B = C + d;
}
for
(
DWORD
i = 0; i < 0x10; i += 0x4)
{
DWORD
a = rol(*(
DWORD
*)(name + ((i+1)&0xf) * 4)+
(D & B | C & ~D) + ti2[i] + A,5);
A = B + a;
DWORD
b = rol(*(
DWORD
*)(name + ((i + 6) & 0xf) * 4)+
(C & A | B & ~C) + ti2[i+1] + D, 9);
D = A + b;
DWORD
c = rol(*(
DWORD
*)(name + ((i + 11) & 0xf)*4)+
(D & B |A & ~B) + ti2[i + 2] + C,14);
C = D + c;
DWORD
d = rol(*(
DWORD
*)(name + (i & 0xf) * 4)+
(C & A | D & ~A) + ti2[i + 3] + B,20);
B = C + d;
}
for
(
DWORD
i = 0, position=5; i < 0x10; i += 0x4, position+=12)
{
DWORD
a = rol(*(
DWORD
*)(name + (position & 0xf) * 4) +
(D ^ C ^ B)+ ti3[i] + A,4);
A = B + a;
DWORD
b= rol(*(
DWORD
*)(name + ((position+3) & 0xf) * 4) +
(C ^ A ^ B) + ti3[i+1]+D, 11);
D = A + b;
DWORD
c = rol(*(
DWORD
*)(name + ((position + 6) & 0xf) * 4) +
(B ^ D ^A) + ti3[i + 2]+C, 16);
C = D + c;
DWORD
d = rol(*(
DWORD
*)(name + ((position + 9) & 0xf) * 4) +
(A ^ D ^ C)+ ti3[i + 3]+B, 23);
B = C + d;
}
for
(
DWORD
i = 0, position = 0; i < 0x10; i += 0x4, position += 12)
{
DWORD
a = rol(*(
DWORD
*)(name + (position & 0xf) * 4) +
(C ^ (B | ~D)) + ti4[i] + A, 6);
A = B + a;
DWORD
b = rol(*(
DWORD
*)(name + ((position + 7) & 0xf) * 4) +
(B ^ (A | ~C)) + ti4[i + 1] + D, 10);
D = A + b;
DWORD
c = rol(*(
DWORD
*)(name + ((position + 14) & 0xf) * 4) +
(A ^ (D | ~B)) + ti4[i + 2] + C, 15);
C = D + c;
DWORD
d = rol(*(
DWORD
*)(name + ((position + 5) & 0xf) * 4) +
(D ^ (C | ~A)) + ti4[i + 3] + B, 21);
B = C + d;
}
magic[0] += A; magic[1] += B; magic[2] += C; magic[3] += D;
}