【问题标题】:Else statement returning wrong result in strcmp (comparing hash value) (updated)Else 语句在 strcmp 中返回错误结果(比较哈希值)(更新)
【发布时间】:2019-08-30 19:02:02
【问题描述】:

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

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

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

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

【讨论】:

  • 我想到了在if(access...) 语句之前放置哈希评估的想法,我确实尝试过,但是if(access...) 被引导相信该文件已经存在.. 这可以吗这是因为fprintf(ftest2, "02x", c[i]);(在哈希评估下)还是因为我事先用fopen打开了文件? (抱歉我缺乏知识!)
  • @JosephSmith:当您打开文件时,如果它不存在,则会创建它。无需提前输出输出文件。只需打开输入文件,计算校验和,关闭输入文件,然后决定如何处理输出。
猜你喜欢
  • 2019-10-15
  • 2014-07-10
  • 2011-09-10
  • 2023-03-05
  • 2021-12-06
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多