openssl - не может вычислить хэш многих файлов - PullRequest
1 голос
/ 23 марта 2019

Я кодирую функцию, чтобы найти все файлы в моей системе, затем помещаю их путь в хеш-функцию (небольшая функция). Моя программа работает корректно для многих первых файлов (~ 4000 файлов). После этого хеш-функция, которую я кодирую, не может вычислить хеш из файлов.

Я кодирую в Code :: block 17.12. Использование SHA из библиотеки openssl.

Функция хеширования:

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:
...