不同的md5sum对于相同的文件内容?

时间:2011-11-11 08:59:48

标签: c linux md5sum

我在计算md5sum时遇到问题。我有一个恢复工具 - 它存档文件的元数据(inode)并且还计算它们的文件的md5sum并在安装期间将它们存储在sqlite db中。文件被删除/删除时。该工具使用sqlite-db中的元数据恢复已删除的文件。它恢复文件。现在,我想确保恢复的文件与原始文件完全相同。因此重新计算恢复的文件md5sum,如下所示。问题是,奇怪的是,对于少数文件,我可以看到(使用cat)文件内容完全相同(就像它被删除之前)& stat命令显示相同的输出(不同的inode编号除外),但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);

1 个答案:

答案 0 :(得分:2)

您无法可靠地将文件内容与cat进行比较。这种方式(除非你使用cat -A或者这样),可能会有很多不同之处:空格与制表符,行尾的空格等等。

您应该将文件与

进行比较
diff -u fileA fileB

cmp fileA fileB