我正在开展一个项目,但我遇到了一些问题。我已经搜索过,但找不到任何满意的答案。
我有一个巨大的文件,包含0和1。 我将1024(我的块)位变为数组块,之后我应用SHA1()函数,该函数在openssl / sha.h库中实现。
char chunk [1024]; 而((与fgets(块1024,FP))!= NULL)
我的意图是我的文件可以包含相同的块,我想计算有多少块相同。
在我的数组块中获得1024位后,我申请:
unsigned char obuf [20];
SHA1(chunk,strlen(chunk),obuf); 函数来获取散列函数的结果。
这里SHA1功能如何工作
unsigned char * SHA1(const unsigned char * d,unsigned long n,unsigned char * md);
之后我想将我的哈希函数结果存储在一个数组中。在我读完所有文件之后,我将使用这个数组来比较是否有相同的哈希结果,通过这种方式我可以启动我的项目但我坚持这一点。我不能把结果obuf放到数组中。
我尝试过: 存储器复制() strcopy() 或者只是myarray [N] [20] = obuf;等如果你建议某种方式,我会很高兴谢谢。
所以最大的问题是找到多少哈希是唯一的?
答案 0 :(得分:1)
首先,您说输入文件的大小 1024 - 但是此行最多会从您的文件读取 1023 个字符(它使用一个空格null终止符):
char chunk[1024]; while((fgets(chunk,1024,fp))!=NULL)
(我认为fread
可能更接近你在这里尝试做的事情)
其次,您可以执行以下操作:
#define MAX_CHUNKS 1000
unsigned char chunk[1024];
unsigned char obuf[MAX_CHUNKS][20];
int chunk_n = 0;
while (fread(chunk, sizeof chunk, 1, fp) > 0 && chunk_n < MAX_CHUNKS)
{
SHA1(chunk, sizeof chunk, obuf[chunk_n++]);
}
/* Now have chunk_n SHA1s stored in obuf[0] through obuf[chunk_n -1] */