m
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
compile:
|
||||
gcc day4.c -Werror=switch -o day4 -lcrypto
|
||||
gcc day4.c -Werror=switch -o day4 -lcrypto -march=native -Ofast -flto
|
||||
|
||||
run:
|
||||
./day4
|
||||
./day4
|
||||
run2:
|
||||
./day4 2
|
||||
@@ -1,33 +1,104 @@
|
||||
#include <openssl/md5.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(){
|
||||
int main(int argc, char* argv[]){
|
||||
printf("\nWEST");
|
||||
const char *input_string = "yzbqklnj";
|
||||
unsigned char output_digest[MD5_DIGEST_LENGTH];
|
||||
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
|
||||
MD5_CTX context;
|
||||
|
||||
zeroes = {0,0,0,0,0}
|
||||
//comparing first 5 digits of output
|
||||
while (memcmp(charx, zeros, 5) !=0){
|
||||
if(!MD5_Init(&context)){
|
||||
fprintf(stderr,"Error MD5init failed");
|
||||
return 1;
|
||||
}
|
||||
//suffix generation
|
||||
if(iteration_number !=0){
|
||||
suffix = iteration_number +1;
|
||||
}
|
||||
suffix =
|
||||
|
||||
const char *zeroes = "000000";
|
||||
if(argc == 1){
|
||||
//comparing first 5 digits of output
|
||||
while (strncmp(output_digest_hex, zeroes, 5) !=0){
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
}} 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
|
||||
|
||||
Reference in New Issue
Block a user