2009-12-04 19 views
0

我正在開發一個項目,並且遇到了一些問題。我已經搜索了但找不到任何滿意的答案。將OPENSSL SHA1()函數的結果導入ARRAY

我有一個巨大的文件由0和1組成。 我得到1024(我的大塊)位到一個數組塊中,然後我應用在openssl/sha.h庫中實現的SHA1()函數。

char chunk [1024]; 而((與fgets(塊,1024,FP))!= NULL)

我的本意是,我的文件可以由相同的塊,我想看看有多少塊是相同的。

後我得到了我的陣列塊1024位我申請:

無符號的字符OBUF [20];

SHA1(chunk,strlen(chunk),obuf);函數 獲取散列函數的結果。

這裏SHA1函數是如何工作

無符號字符* SHA1(const的無符號字符* d,無符號N久,無符號字符* MD);

後,我想我的存儲哈希函數的結果在array.After我讀了所有我的文件,我將用這個數組來比較,如果有相同的散列結果還是不行,通過這種方法,我可以開始我的項目。但我堅持這一點。我不能把結果obuf放到數組中。

我試過了: memcopy() strcopy() 或者只是myarray [N] [20] = obuf;等

如果你建議某種方式,我會很高興謝謝。

所以最大的問題是,找出有多少哈希是唯一的?

回答

1

首先,你說你的輸入文件的塊是大小 - 然而,這條線會從你的文件中讀取最多字符(它使用空終結一個空格):

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] */ 
+0

我只是嘗試它,它是有道理的。你是對的,這行最多可以讀取1023,但我可以修改我的問題只是把它放入數組中... – berkay 2009-12-04 11:11:33

+0

你需要使用函數memcmp(obuf [i],obuf [j],20)'來比較哈希。如果兩個散列值相等,memcmp將返回0。我認爲你可能需要刷新你的C基礎知識...... – caf 2009-12-04 12:01:12

+0

它不像你想象的那麼容易,因爲我們認爲我的哈希值是[5,4,5,4,3,3,2,1,5,2 ]使用memcmp很難實現這個功能。(在C初學者) – berkay 2009-12-04 12:36:51