2024年5月30日发(作者:)

words[i] = to_int32(newmsg + offset + i*4);

a = h0; b = h1; c = h2; d = h3;

for (uint32_t i = 0; i < 64; i ++){

if (i < 16) {

f = (b & c) | ((~b) & d);

g = i;

} else if (i < 32) {

f = (d & b) | ((~d) & c);

g = (5*(i-16) + 1) % 16;

} else if (i < 48) {

f = b ^ c ^ d;

g = (3*(i-32) + 5) % 16;

} else {

f = c ^ (b | (~d));

g = (7*(i-48)) % 16;

}

temp = d;

d = c;

c = b;

b = b + LEFTSHIFT((a+f+k[i]+words[g]), r[i]);

a = temp;

}

h0 += a;

h1 += b;

h2 += c;

h3 += d;

}

free(newmsg);

to_bytes(h0, digest);

to_bytes(h1, digest+4);

to_bytes(h2, digest+8);

to_bytes(h3, digest+12);

}

int main(int argc, char **argv){

char *msg;

clock_t start,finish;

double duration;

size_t msglen;

uint8_t result[16];

char *inputstring = "-s";

char *inputfile = "-f";

if (argc < 2){

printf("usage: %s 'string'n", argv[0]);

return 1;

} else if (!strcmp(argv[1],inputstring)){

msg = argv[2];

msglen = strlen(msg);

start = clock();

md5((uint8_t*)msg, msglen, result);

for (int i = 0; i < 16; i++)

printf("%2.2x", result[i]);

printf("n");

finish = clock();

duration = (double)(finish - start) / CLOCKS_PER_SEC;

printf("time cost: %fn", duration);

system("pause");

return 0;

} else if (!strcmp(argv[1],inputfile)){

FILE *infile;

infile = fopen(argv[2],"rb");

if (infile == NULL){

printf("%s not existn",argv[2]);

return -1;

} else {

fseek(infile, 0, SEEK_END);

size_t filesize = ftell(infile);

rewind(infile);

uint8_t *buffer = (uint8_t*)malloc(sizeof(uint8_t)*filesize);

fread(buffer, sizeof(uint8_t), filesize, infile);

start = clock();

md5(buffer, filesize, result);

for (int i = 0; i < 16; i++)

printf("%2.2x", result[i]);

printf("n");

finish = clock();

duration = (double)(finish - start) / CLOCKS_PER_SEC;

printf("time cost: %fn", duration);

system("pause");

return 0;

}

}

}