Программа компилируется и запускается, однако в ftest2
выводится всего 0 (точнее 129), в отличие от значения хеш-функции. Я установил inotify_event
перед snprintf
для наблюдения за каталогом (который работает правильно), однако для удобства чтения я удалил это. hashInBuf
& hashOutBuf
впоследствии создайте правильные файлы / местоположения.
int main (int argc, char *argv[])
{
int fd;
unsigned char buffer[BUFSIZ];
unsigned int md_len, i;
size_t len2;
unsigned char md_value[EVP_MAX_MD_SIZE];
EVP_MD_CTX *hashctx;
const EVP_MD *hashptr = EVP_get_digestbyname("SHA512");
const int event_size = sizeof(struct inotify_event);
const int buf_len = 1024 * (event_size + FILENAME_MAX);
char *directory = "/home/joe/Documents/";
char *hashDirectory = "/home/joe/Documents/_Hash/";
char hashInBuf[500];
char hashOutBuf[500];
char file512[500];
//Conjoin directory and filename
snprintf(hashInBuf, sizeof(hashInBuf), "%s/%s", directory, event->name);
snprintf(hashOutBuf, sizeof(hashOutBuf), "%s/%s.txt", hashDirectory, event->name);
FILE *ftest=fopen(hashInBuf, "rb");
hashctx = EVP_MD_CTX_create();
EVP_DigestInit_ex(hashctx, hashptr, NULL);
do {
len2 = fread(buffer, 1, BUFSIZ, ftest);
EVP_DigestUpdate(hashctx, buffer, len2);
} while (len2 == BUFSIZ);
unsigned int outlen;
EVP_DigestFinal_ex(hashctx, buffer, &outlen);
EVP_MD_CTX_destroy(hashctx);
if(access(hashOutBuf, F_OK) == -1){
FILE *ftest2=fopen(hashOutBuf, "wt");
for(i = 0; i < outlen; i++){
fprintf(ftest2, "%02x", md_value[i]);
}
printf("File hash complete\n");
fclose(ftest2);
fclose(ftest);
}
Я тестировал буферы / size_t
, поэтому есть несколько ненужных вещей ниже main
и хитрых отступов. Я пытался обновить хэш-функцию до нового метода EVP.