我正在尝试创建一个解决方案,通过该解决方案,文件的哈希计算,存储在.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。)
您似乎在询问如何避免重复“else”语句中if
的“then”语句中出现的代码。 (这与询问如何避免重复散列函数不同;散列函数在任何一种情况下都只会被评估一次,而不是重复。)
一种选择是在if(access…)
语句之前执行哈希评估并记住其结果,然后在“then”语句内部和“else”语句中使用其结果。
另一种选择是创建一个执行哈希评估的子程序,然后从“then”语句内部和“else”语句中调用它。