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