2009-12-04 3 views
0

Я работаю над проектом, и у меня есть некоторые проблемы. Я искал, но не могу найти удовлетворенного ответа.Получение результата функции OPENSSL SHA1() в ARRAY

У меня огромный файл состоит из 0 и 1s. Я получаю 1024 (мой кусок) битов в массив, и после этого я применяю функцию SHA1(), которая реализована в библиотеке openssl/sha.h.

char chunk [1024]; в то время как ((fgets (фрагмент, 1024, FP))! = NULL)

Мое намерение состоит в том, что мой файл может состоять из одинаковых кусков, и я хочу, чтобы подсчитать, сколько кусков одинаковы.

После я получаю 1024 бит в моем массиве кусок я применить:

неподписанные символ obuf [20];

SHA1 (кусок, strlen (кусок), obuf); Функция для получения результата хэш-функции.

здесь, как работает функция SHA1

неподписанные символ * SHA1 (Const символ без знака * d, без знака длиной п, неподписанные символ * д);

после этого я хочу сохранить свою функцию хэш-функции в массиве. После того, как я прочитал весь свой файл, я буду использовать этот массив для сравнения, если есть такие же результаты хеширования или нет, таким образом я могу запустите мой проект. Но я застрял в этом вопросе. Я не могу поместить результат 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

+0

Вам нужно будет использовать функцию 'memcmp (obuf [i], obuf [j], 20)' to сравните хеши. 'memcmp' вернет' 0', если два хэша равны. Я думаю, вам, возможно, понадобится освежить ваши основы C ... – caf

+0

это не так просто, как вы думаете, потому что подумаем, что мои хэши [5,4,5,4,3,3,2,1,5,2 ] трудно реализовать функцию, используя memcmp.(beginner in c) – berkay

Смежные вопросы