Инструкция Else, возвращающая неверный результат в strcmp (сравнение хеш-значения) (обновлено) - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь создать решение, с помощью которого файл вычисляет свой хэш, хранит его в файле .txt и облегчает проверку исходного значения хеш-кода по сравнению с тем же файлом.Оператор else просто возвращает 2 символа, хотя я не уверен, как включить его в хэш-функцию.

Есть ли способ избежать повторения хэш-функции для оператора else?(что само по себе, как я понимаю, имеет массу проблем, но это попытка с моей стороны) ..

                //CHECK IF HASH FILE ALREADY EXISTS

                if(access(hashOutBuf, F_OK) == -1) {
                  FILE *ftest=fopen(hashInBuf, "rb");
                  FILE *ftest2=fopen(hashOutBuf, "wt");

                //HASH FUNCTION

                  SHA512_Init (&mdContext);
                  while ((bytes = fread (data, 1, 1024, ftest)) != 0)
                      SHA512_Update (&mdContext, data, bytes);
                  SHA512_Final (c,&mdContext);
                  for(i = 0; i < SHA512_DIGEST_LENGTH; i++){
                    fprintf(ftest2, "%02x", c[i]);
                    printf("%02x", c[i]);
                  }
                  fclose (ftest);
                  fclose (ftest2);
                  fflush (stdout);
                }
                //MY (SORRY) ATTEMPT AT TRYING TO CHECK IF HASH IS IDENTICAL
                else{
                  printf("%02x", c[i]);
                  FILE *ftest2=fopen(hashOutBuf, "r");
                  sprintf(ch1, "%d", c[i]);
                  while (!feof(ftest2)){
                    char ch2[100];
                    fscanf(ftest2, "%s", ch2);
                    if(strcmp(ch2, ch1) == 0){
                      printf("File is identical");
                    }
                    else {
                      printf("File has changed");
                      printf("%s\n", ch1);
                      printf("%s", ch2);
                    }

                  }

Любые советы / указатели будут высоко цениться, я понимаю, что помимо хэш-функции это немногоиз-за беспорядка - я не очень хорош в кодировании, поэтому заранее извиняюсь.

* все переменные были определены ранее (и все равно работают правильно, для хэш-функции. Использует openssl.)

1 Ответ

0 голосов
/ 09 апреля 2019

Вы, похоже, спрашиваете, как избежать повторения кода, который появляется в операторе «then» if в операторе «else».(Это отличается от вопроса о том, как избежать повторения хэш-функции; хэш-функция будет оцениваться только один раз в любом случае, а не повторяться.)

Один из вариантов - выполнить оценку хеш-функции перед оператором if(access…) изапомните его результаты, затем используйте его результаты внутри оператора «then» и внутри оператора «else».

Другой вариант - создать подпрограмму, которая выполняет оценку хеша, а затем вызвать ее изнутри «then»заявление и внутри утверждения «еще».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...