문제

프로젝트를 진행하고 있는데 몇 가지 문제가 있습니다. 검색했지만 만족스러운 답변을 찾을 수 없습니다.

거대한 파일은 0과 1로 구성됩니다. 1024 (내 청크) 비트를 배열 청크에 넣고 그 후 OpenSSL/Sha.h 라이브러리에서 구현되는 SHA1 () 함수를 적용합니다.

숯 청크 [1024]; while ((fgets (Chunk, 1024, fp))! = null)

내 의도는 내 파일이 동일한 청크로 구성 될 수 있고 몇 개의 청크가 동일하다는 것입니다.

배열 청크에서 1024 비트를 얻은 후에는 다음을 적용합니다.

서명되지 않은 Char Obuf [20];

SHA1 (청크, Strlen (Chunk), Obuf); 함수 해시 함수의 결과를 얻을 수 있습니다.

여기에서 SHA1 기능이 어떻게 작동하는지

부호없는 char *sha1 (const 부호없는 char *d, 부호없는 긴 n, 서명되지 않은 char *md);

그 후 해시 함수 결과를 배열에 저장하고 싶습니다. 모든 파일을 읽은 후에는이 배열을 사용하여 동일한 해시 결과가 있든 없든 비교할 것입니다.이 방법으로 프로젝트를 시작할 수 있습니다. 이 시점에 붙어 있습니다. 결과 OBUF를 배열에 넣을 수 없습니다.

나는 시도했다 : memcopy () strcopy () 또는 Just MyArray [n] [20] = obuf; 등.

당신이 어떤 식 으로든 제안한다면, 나는 행복 할 것입니다. 감사합니다.

그렇다면 가장 큰 문제는 얼마나 많은 해시가 독특하다는 것을 찾는 것입니다.

도움이 되었습니까?

해결책

첫째, 입력 파일의 덩어리가 크기라고 말합니다. 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] */
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top