отличается md5sum для одного и того же содержимого файла? - PullRequest
2 голосов
/ 11 ноября 2011

У меня проблема с вычислением md5sum. У меня есть инструмент восстановления, который архивирует метаданные файла (inode), а также вычисляет md5sum их файлов и сохраняет их в sqlite db во время установки. Когда файл будет удален / удален. инструмент восстанавливает удаленный файл, используя метаданные из sqlite-db. Он восстанавливает файл. Теперь я хотел убедиться, что восстановленный файл точно такой же, как и исходный файл. Таким образом, пересчитал восстановленные файлы md5sum, как показано ниже. Проблема в том, что, как ни странно, для нескольких файлов я вижу (при использовании cat) содержимое файла точно такое же (как и прежде, чем оно было удалено), а команда stat показывает тот же вывод (кроме другого номера inode), но md5sum отличается.

Следующие 2 файла имеют одинаковое содержимое - таким образом, наличие другого номера инода не влияет на 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 Ответ

2 голосов
/ 11 ноября 2011

Вы не можете достоверно сравнить содержимое файла с cat. Таким образом (если вы не используете cat -A или что-то подобное), может быть много различий, которые остаются незамеченными: пробелы и табуляции, пробелы в конце строк и т. Д.

Вы должны сравнить файлы с

diff -u fileA fileB

или

cmp fileA fileB

.

...