我在計算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);
',我可以看到(使用貓)'如果有東西你看不到?控制字符,空格與製表符,一個文件結尾的換行符?對文件做一個hexdump並比較十六進制。 – nos
爲什麼問題是具有完全相同內容的文件具有相同的MD5? –
或者只是不同的編碼。 MD5適用於二進制表示。 –