首页 > 解决方案 > openssl - 无法计算许多文件的哈希

问题描述

我编写了一个函数来查找系统中的所有文件,然后将它们的路径放入哈希函数(一个小函数)中。我的程序适用于许多第一个文件(约 4000 个文件)。之后,我编码的哈希函数无法从文件中计算哈希。

我在 Code::block 17.12 中编码。使用 openssl 库中的 SHA。

哈希函数:

int hashcompute(TCHAR *fpath, char *rs)   {
    unsigned char data[1024*8] = {0};
    size_t length, bytes;
    unsigned char hash[SHA_DIGEST_LENGTH] = {0};
    FILE *fp;

    SHA_CTX context;
    if(!SHA1_Init(&context))
        return 0;

    fp = fopen(fpath, "rb");
    if (fp == NULL) return 0;

    while( (bytes = fread(data, 1, 1024*8, fp)))     {
        length = sizeof(data);
        if(!SHA1_Update(&context, (unsigned char*)data, bytes))    return 0;
    }

    if(!SHA1_Final(hash, &context))
        return 0;
    close(fp);
    for(int i = 0; i < 20; i++) {
//        printf("%02x", hash[i]);
        snprintf((char*)&rs[i*2], length-1, "%02x", hash[i]);
    }
    if (hash == 0) return 0;
    return 1;
}

一些输出:

Hash: b6d437b942194b19f45015d22d5bc4ab98058038
Result:
Hash: 45031c9a127520c68fb9bf3d19b680525126ab5e
Result:
Hash: 07aea0a3345938068b6e6e91f18edf7a6947a2b9
Result:
Hash: 2e6c38958917fb86f09026d41337c7460efbe5f5
Result:
Hash: fae05ccc1af5711590b68344822febd90049c958
Result:
Hash: 5bf7594ebe9d3b75a790f30046995502b3e5b2b7
Result:
Hash:
Result:
Hash:
Result:
Hash:
Result:
Hash:
Result:
Hash:

标签: c++copensslcodeblocks

解决方案


推荐阅读