将OPENSSL SHA1()函数的结果导入ARRAY

时间:2009-12-04 10:21:40

标签: c openssl sha1

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

我有一个巨大的文件,包含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;等

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

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

1 个答案:

答案 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] */