Nguyên văn bởi tienhuypro
Xem bài viết
)
)
) nhưng hỗ trợ RAM ngoài, xin thầy chỉ giúp em.
)

) nhưng hỗ trợ RAM ngoài, xin thầy chỉ giúp em.
)
)


)
sum += *(unsigned char *) data;

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define left_rotate(x,n) (((x) << (n)) | ((x) >> (32-(n))))
void md5(unsigned char len, unsigned long *w)
{
unsigned long bit_length = (len + 1)*8;
unsigned char *p;
p = NULL;
unsigned char i = 0, n = 0, j = 0;
//Mang chua cac hang so se duoc xu ly trong 1 tac vu
unsigned long k[64];
//Khoi tao chuoi
unsigned long h0 = 0x67452301;
unsigned long h1 = 0xefcdab89;//0xEFCDAB89;
unsigned long h2 = 0x98badcfe;//0x98BADCFE;
unsigned long h3 = 0x10325476;
//Xac dinh cac gia tri dich chuyen cua moi tac vu
unsigned long r[64] = {7,12,17,22, 7,12,17,22, 7,12,17,22, 7,12,17,22,
5,9,14,20, 5,9,14,20, 5,9,14,20, 5,9,14,20,
4,11,16,23, 4,11,16,23, 4,11,16,23, 4,11,16,23,
6,10,15,21, 6,10,15,21, 6,10,15,21, 6,10,15,21};
for(i = 0; i < 64; i++)
{
k[i] = floor(pow(2,32) * abs(sin(i+1)));
}
unsigned char padded[56];
padded[0] = 0x80;
for(i = 1; i < 56; i++)
padded[i] = 0;
//------------------------------------------------------------
//Tien xu ly
p = (unsigned char*)w;
n = 448/8 - len;
i = len + 1;
while(j < n)
{
p[i++] = padded[j++];
}
w[15] = bit_length;
i = 0;
while(i < 64)
printf(" %u", p[i++]);
//-------------------------------------------------------
//VOOC
unsigned long a = h0;
unsigned long b = h1;
unsigned long c = h2;
unsigned long d = h3;
unsigned long f;
unsigned char g;
unsigned long temp;
for(i = 0; i < 64; i++)
{
if(i < 16)
{
f = (b & c) | ((~b) & d);
g = i;
}
else if(16 <= i && i < 32)
{
f = (d & b) | ((~d) & c);
g = (5*i + 1) % 16;
}
else if(32 <= i && i < 48)
{
f = b ^ c ^ d;
g = (3*i + 5) % 16;
}
else if(48 <= i)
{
f = c ^ (b | (~d));
g = (7*i) % 16;
}
temp = d;
d = c;
c = b;
b = b + left_rotate((a + f + k[i] + w[g]),r[i]);
a = temp;
}
printf("\n a = %x",a);
printf("\n b = %x",b);
printf("\n c = %x",c);
printf("\n d = %x",d);
h0 += a;
h1 += b;
h2 += c;
h3 += d;
printf("\n Ket qua hash la %x%x%x%x", h3, h2, h1, h0);
printf("\n Ket qua h0 la %x", h0);
printf("\n Ket qua h1 la %x", h1);
printf("\n Ket qua h2 la %x", h2);
printf("\n Ket qua h3 la %x", h3);
}
int main()
{
unsigned char input[64] = "";
unsigned char len = strlen(input);
md5(len, (unsigned long*)input);
while(getchar() != '\n');
return 0;
}
Leave a comment: