2011-11-11 2 views
2

md5sum 계산에 문제가 있습니다. 나는 파일의 메타 데이터 (inode)를 보관하고 파일의 md5sum을 계산하고 설치 중에 sqlite db에 저장하는 복구 도구를 가지고 있습니다. 파일이 제거/삭제되면. 이 도구는 sqlite-db의 메타 데이터를 사용하여 삭제 된 파일을 복구합니다.이 파일을 복구합니다. 이제 복구 된 파일이 원래 파일과 정확히 동일해야합니다. 다음과 같이 복구 된 파일 md5sum을 다시 계산했습니다. 문제는 이상하게도 파일 수가 적어서 (고양이를 사용하여) 파일 내용이 정확히 동일하다는 것입니다 (삭제되기 전과 같습니다) & stat 명령은 동일한 출력 (다른 inode 번호 제외)을 표시하지만 md5sum은 다릅니다.동일한 파일 내용에 대해 다른 md5sum?

다음과 같은 두 개의 파일이 동일한 콘텐츠를 가지므로 - inode 번호가 다르면 md5sum에 영향을 미치지 않습니다.

764efa883dda1e11db47671c4a3bbd9e /test/hi1.txt 
764efa883dda1e11db47671c4a3bbd9e /test/hi.txt 

의견을 보내려면 어떻게해야합니까?

char file_location[512] = {0}; 

char md5_cmd[512], md5sum[34]; 
FILE *pf; 
//some recovery stuff goes here... 

//Recompute md5 of recovered file 
memset(md5_cmd, '\0', 512); 
sprintf(md5_cmd, "md5sum %s", file_location); 

pf = popen(md5_cmd, "r"); 
if (!pf) { 
    fprintf(stderr,"Could not open pipe"); 
    return; 
} 

// get data 
fgets(md5sum, 34, pf); 

if (pclose(pf) != 0) 
fprintf(stderr, "Error: close Failed."); 

fprintf(stdout, "Md5sum is %s", md5sum); 
+3

'볼 수있는 물건이 있으면 어떨까요? 제어 문자, 공백 대 탭, 한 줄 끝에 줄 바꿈? 파일에 대해 hexdump를 수행하고 16 진수를 비교합니다. – nos

+1

동일한 내용의 파일이 동일한 MD5를 갖는 것이 왜 문제입니까? –

+1

또는 다른 인코딩. MD5는 이진 표현에서 작동합니다. –

답변

2

안정적으로 파일 내용을 cat과 비교할 수 없습니다. 이 방법은 (당신이 cat -A 또는를 사용하지 않는 한),인지하지 못하고가는 많은 차이가있을 수 있습니다 공백 대 탭, 라인의 끝에 공백 등

당신의 파일을 비교해야

diff -u fileA fileB 

또는

cmp fileA fileB 

.

+0

, 감사합니다. diff도 시도해 보겠습니다. –

+1

감사합니다 얘들 아, hexdump와 diff를 사용하여 실제로 파일이 실제로 다른 것을 보여줍니다, 그들은 (내용은) 내가 생각했던 것과 같지 않습니다. –

관련 문제