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;
}
}
}


发布评论