openssl-无法计算许多文件的哈希

时间:2019-03-23 18:42:15

标签: c++ c openssl codeblocks

我编写了一个函数来查找系统中的所有文件,然后将其路径放入哈希函数(一个小函数)中。我的程序对许多第一个文件(约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:

0 个答案:

没有答案