int main(int argc, char **argv) { if(argc < 2) return 1; FILE *f = fopen(argv[1], "rb"); if(!f) return 1; struct stat st; fstat(fileno(f), &st); std::string md5; if(argc > 3) md5_compute(f, atoi(argv[2]), atoi(argv[3]), md5); else md5_compute(f, 0, st.st_size-1, md5); printf("%s\n", md5.c_str()); return 0; }
/** * Calculates number of hashes from stdin or from files * * Expected input ./gethash [-md5] [-c16] [-c32] [-xor] [-hex] [-f file] */ int main( int argc, char *argv[] ) { unsigned char hash = 0; FILE *file = stdin; parse_args(argc, argv, &hash, &file); unsigned int length; unsigned char *data = read_file(file, &length); printf("Length: %i bytes\n", length); if(hash & XOR){ printf("XOR: "); if(hash & HEX) printf("0x%02x\n", xor_compute(data, length)); else printf("%u\n", xor_compute(data, length)); } if(hash & C16){ printf("CRC-16: "); if(hash & HEX) printf("0x%04x\n", crc16_compute(data, length)); else printf("%u\n", crc16_compute(data, length)); } if(hash & C32){ printf("CRC-32: "); if(hash & HEX) printf("0x%08x\n", crc32_compute(data, length)); else printf("%u\n", crc32_compute(data, length)); } if(hash & MD5){ unsigned char result[16]; md5_compute(data, length, result); printf("MD5: "); for (int i = 0; i < 16; i++){ printf("%02x", result[i]); } printf("\n"); } free(data); fclose(file); return 0; }