Я пытаюсь создать решение, с помощью которого файл вычисляет свой хэш, хранит его в файле .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.)