m
This commit is contained in:
@@ -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
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user