Получение результата функции OPENSSL SHA1 () в массив - PullRequest
0 голосов
/ 04 декабря 2009

Я работаю над проектом, и у меня есть некоторые проблемы. Я искал, но не могу найти никакого удовлетворенного ответа.

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

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

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

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

без знака char 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] = обуф; и т.д.

если вы предложите какой-нибудь способ, я буду счастлив, спасибо.

так что самая большая проблема в том, что найти сколько хешей уникально?

1 Ответ

1 голос
/ 04 декабря 2009

Во-первых, вы говорите, что ваши куски входного файла имеют размер 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] */
...