OpenSSL EVP创建不正确的哈希值

时间:2019-05-05 14:12:07

标签: c openssl

程序正在编译并正在运行,但是与哈希值相反,ftest2的输出仅为0(准确地说是129)。我在inotify_event之前设置了snprintf来监视目录(其功能正常),但是出于可读性/简单性的考虑,我删除了该目录。 hashInBufhashOutBuf随后必须创建正确的文件/位置。

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方法。

0 个答案:

没有答案