This commit is contained in:
2025-12-15 23:09:56 +00:00
parent 064504ab2b
commit 9f934e6dd4
2 changed files with 92 additions and 19 deletions

View File

@@ -1,5 +1,7 @@
compile: compile:
gcc day4.c -Werror=switch -o day4 -lcrypto gcc day4.c -Werror=switch -o day4 -lcrypto -march=native -Ofast -flto
run: run:
./day4 ./day4
run2:
./day4 2

View File

@@ -1,33 +1,104 @@
#include <openssl/md5.h> #include <openssl/md5.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <stdbool.h>
#include <stdlib.h>
int main(){ int main(int argc, char* argv[]){
printf("\nWEST"); printf("\nWEST");
const char *input_string = "yzbqklnj"; const char *input_string = "yzbqklnj";
unsigned char output_digest[MD5_DIGEST_LENGTH]; unsigned char output_digest[MD5_DIGEST_LENGTH];
unsigned long long int iteration_number = 0; unsigned long long int iteration_number = 0;
unsigned long long int suffix = 0;
unsigned long long int count;
unsigned char output_digest_hex[MD5_DIGEST_LENGTH * 2 + 1];
bool initialisation = false;
//creating empty md5 context //creating empty md5 context
MD5_CTX context; MD5_CTX context;
zeroes = {0,0,0,0,0} const char *zeroes = "000000";
//comparing first 5 digits of output if(argc == 1){
while (memcmp(charx, zeros, 5) !=0){ //comparing first 5 digits of output
if(!MD5_Init(&context)){ while (strncmp(output_digest_hex, zeroes, 5) !=0){
fprintf(stderr,"Error MD5init failed"); printf("%s\n",output_digest_hex);
return 1; printf("loop %llu\n", iteration_number);
} if(initialisation == false && iteration_number == 0){
//suffix generation MD5((const unsigned char*)input_string,strlen(input_string),output_digest);
if(iteration_number !=0){ iteration_number++;
suffix = iteration_number +1; for(int i = 0; i< MD5_DIGEST_LENGTH; i++){
} sprintf(&output_digest_hex[i * 2], "%02x", output_digest[i]);
suffix = }
output_digest_hex[32] = '\0';
initialisation = true;
}else if(iteration_number >= 1){
suffix = iteration_number;
count = snprintf(NULL, 0, "%llu", suffix);
char *suffix_string = malloc(count +1);
sprintf(suffix_string,"%llu",suffix);
char *loop_input_string = calloc(1,8 + count + 1);
strcat(loop_input_string,input_string);
strcat(loop_input_string,suffix_string);
MD5((const unsigned char*)loop_input_string,strlen(loop_input_string),output_digest);
iteration_number++;
for(int i = 0; i< MD5_DIGEST_LENGTH; i++){
sprintf(&output_digest_hex[i * 2], "%02x", output_digest[i]);
}
output_digest_hex[32] = '\0';
printf("\n%s\n",loop_input_string);
free(suffix_string);
free(loop_input_string);
} else {
//ERROR!
return 1;
}
}} else {
while (strncmp(output_digest_hex, zeroes, 6) !=0){//Part 2 is to find the suffix which gives 6 leading zeroes on the output
printf("%s\n",output_digest_hex);
printf("loop %llu\n", iteration_number);
if(initialisation == false && iteration_number == 0){
MD5((const unsigned char*)input_string,strlen(input_string),output_digest);
iteration_number++;
for(int i = 0; i< MD5_DIGEST_LENGTH; i++){
sprintf(&output_digest_hex[i * 2], "%02x", output_digest[i]);
}
output_digest_hex[32] = '\0';
initialisation = true;
}else if(iteration_number >= 1){
suffix = iteration_number;
count = snprintf(NULL, 0, "%llu", suffix);
char *suffix_string = malloc(count +1);
sprintf(suffix_string,"%llu",suffix);
char *loop_input_string = calloc(1,8 + count + 1);
strcat(loop_input_string,input_string);
strcat(loop_input_string,suffix_string);
MD5((const unsigned char*)loop_input_string,strlen(loop_input_string),output_digest);
iteration_number++;
for(int i = 0; i< MD5_DIGEST_LENGTH; i++){
sprintf(&output_digest_hex[i * 2], "%02x", output_digest[i]);
}
output_digest_hex[32] = '\0';
printf("\n%s\n",loop_input_string);
free(suffix_string);
free(loop_input_string);
} else {
//ERROR!
return 1;
}
}
}
printf("%s%llu\n", input_string,iteration_number -1);
printf("%s\n", output_digest_hex);
}
} }
//input = yzbqklnj //input = yzbqklnj