OpenSSL EVP создает неправильное хеш-значение - PullRequest
1 голос
/ 05 мая 2019

Программа компилируется и запускается, однако в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...