#include <openssl/md5.h> // gcc ... -lcrypto #include <stdio.h> #include <string.h> int main(void) { char password[99]; printf("Enter password: "); fflush(stdout); fgets(password, 99, stdin); password[strcspn(password, "\n")] = 0; unsigned char hash[MD5_DIGEST_LENGTH]; union { unsigned char u[120]; char s[120]; } key; int n = 1; for (;;) { size_t len = sprintf(key.s, "%s%d", password, n); MD5(key.u, len, hash); if ((hash[0] == 0) && (hash[1] == 0) && (hash[2] < 16)) break; n++; } printf("DAY04-PART1: %d\n", n); for (;;) { size_t len = sprintf(key.s, "%s%d", password, n); MD5(key.u, len, hash); if ((hash[0] == 0) && (hash[1] == 0) && (hash[2] == 0)) break; n++; } printf("DAY04-PART2: %d\n", n); return 0; }