Else语句在strcmp中返回错误的结果(比较哈希值)(更新)

问题描述 投票:0回答:1

我正在尝试创建一个解决方案,通过该解决方案,文件的哈希计算,存储在.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。)

c loops hash while-loop openssl
1个回答
0
投票

您似乎在询问如何避免重复“else”语句中if的“then”语句中出现的代码。 (这与询问如何避免重复散列函数不同;散列函数在任何一种情况下都只会被评估一次,而不是重复。)

一种选择是在if(access…)语句之前执行哈希评估并记住其结果,然后在“then”语句内部和“else”语句中使用其结果。

另一种选择是创建一个执行哈希评估的子程序,然后从“then”语句内部和“else”语句中调用它。

© www.soinside.com 2019 - 2024. All rights reserved.