程序正在编译并正在运行,但是与哈希值相反,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方法。