Я кодирую функцию, чтобы найти все файлы в моей системе, затем помещаю их путь в хеш-функцию (небольшая функция). Моя программа работает корректно для многих первых файлов (~ 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: