2011-11-11 41 views
2

我在計算md5sum時遇到了問題。我有一個恢復工具,該工具將文件的元數據(inode)歸檔並計算其文件的md5sum,並在安裝期間將它們存儲在sqlite數據庫中。當文件被刪除/刪除。該工具使用來自sqlite-db的元數據恢復已刪除的文件。它恢復文件。現在,我想確保恢復的文件與原始文件完全相同。因此,重新計算恢復的文件md5sum,如下所示。問題是,對於很少的文件奇怪,我可以看到(使用cat)文件內容完全相同(與刪除前相同)& stat命令顯示相同的輸出(不同的inode編號除外),但md5sum不同。對於相同的文件內容不同的md5sum?

以下2個文件具有相同的內容 - 因此具有不同的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並比較十六進制。 – nos

+1

爲什麼問題是具有完全相同內容的文件具有相同的MD5? –

+1

或者只是不同的編碼。 MD5適用於二進制表示。 –

回答

2

您無法可靠地比較文件內容與cat。通過這種方式(除非你使用cat -A或這樣),可以有很多的區別,其通過被忽視去:空格與製表符,空格在線路末端,等

你應該比較文件

diff -u fileA fileB 

cmp fileA fileB 

+0

,謝謝我會嘗試差異。 –

+1

感謝球員,使用hexdump和diff確實顯示文件確實不同,它們(內容)與我想象的不一樣。 –

相關問題