0

我正在做一个项目,但遇到了一些问题。我已经搜索过,但找不到任何满意的答案。

我有一个由 0 和 1 组成的巨大文件。我将 1024(我的块)位放入一个数组块中,然后我应用在 openssl/sha.h 库中实现的 SHA1() 函数。

字符块[1024];而((fgets(块,1024,fp))!= NULL)

我的意图是我的文件可以包含相同的块,我想计算有多少块是相同的。

在我的数组块中获得 1024 位后,我申请:

无符号字符 obuf[20];

SHA1(块,strlen(块),obuf);函数获取哈希函数的结果。

这里 SHA1 函数是如何工作的

unsigned char *SHA1(const unsigned char *d, unsigned long n,unsigned char *md);

之后我想将我的哈希函数结果存储在一个数组中。在我读取了所有文件之后,我将使用这个数组来比较是否有相同的哈希结果,这样我就可以开始我的项目了。但是我卡在这一点上。我不能将结果 obuf 放入数组中。

我试过: memcopy() strcopy() 或只是 myarray[N][20]=obuf; 等等

如果您建议某种方式,我会很高兴谢谢。

所以最大的问题是找到多少个哈希是唯一的?

4

1 回答 1

1

首先,您说您的输入文件块的大小为1024 - 但是这一行将从您的文件中读取最多1023个字符(它使用一个空格作为空终止符):

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] */
于 2009-12-04T11:02:48.527 回答