2

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);
4

1 に答える 1

3

ファイルの内容を と確実に比較することはできませんcat。このように (使用しない限りcat -A)、見過ごされる多くの違いがある可能性があります: スペースとタブ、行末の空白など。

ファイルを比較する必要があります

diff -u fileA fileB

また

cmp fileA fileB

.

于 2011-11-11T09:06:55.240 に答える