crc32で私のファイルのいくつかが「BAD」と言うのはなぜですか?

crc32で私のファイルのいくつかが「BAD」と言うのはなぜですか?

一度は、crc32いくつかのファイルをバックアップと比較しました。次の例に示すように、3556個のファイルのうち11個が「BAD」として報告されました。

9be46354        ./9836Feeding_the_dog_.mpeg   BAD 9be46354 != 9836Feed

しかし、これらのファイルはいいえ良いことではありませんが、何らかの理由でcrc32計算されたチェックサムがファイル名の一部と比較されます。

それから実験を試みた。

$ echo 12345 > 9836Feeding_the_dog_.mpeg
$ crc32 9836Feeding_the_dog_.mpeg
261dafe6

したがって、crc32今回はチェックサムがファイル名と比較されず、ファイルが「BAD」ではないようです。

ここで何が起こっているのでしょうか?他のチェックサムでもこれは起こりますか?

ベストアンサー1

crc32使用している実行可能ファイルは、Perlモジュールと共に配布されるPerlスクリプトですArchive::Zip

Perlcrc32スクリプトは非常に短く、次の内容が含まれています。

if ( $file =~ /[^[:xdigit:]]([[:xdigit:]]{8})[^[:xdigit:]]/ ) {
    my $filenameCrc = $1;
    if ( lc($filenameCrc) eq lc($fileCrc) ) {
        print("\tOK")
    } else {
        print("\tBAD $fileCrc != $filenameCrc");
    }
}

それは、ファイルのパス名8つの連続した16進数を含み、前後に16進数以外の数字が1つ以上あります。この16進数ファイルのCRC32チェックサムと比較してください。

あなたの場合は実行crc32中です./9836Feeding_the_dog_.mpeg。パス名には、16進数以外の数字(./)、正確に8つの16進数字(9836Feed)、16進数以外の数字が順番に含まれます。 9836FeedファイルのCRC32チェックサムではないので文句を言います。

この「良い」アクションをトリガーする例:

$ cat 261dafe6_file
12345
$ crc32 ./261dafe6_file
261dafe6        OK

テストを再生成し、./ファイルパス名を先頭に追加して「BAD」応答を生成します。

$ echo 12345 >9836Feeding_the_dog_.mpeg
$ crc32 9836Feeding_the_dog_.mpeg
261dafe6

$ crc32 ./9836Feeding_the_dog_.mpeg
261dafe6        BAD 261dafe6 != 9836Feed

実行可能ファイルが文書化されておらず、明らかに少し奇妙で広く使われていないのでcrc32(私はそれについて知らず、追跡する必要がありましたが、おそらくあまり意味がありません)、計算するために他のツールを使用することをお勧めします。ファイルのチェックサム。 GNU coreutilsツールはmd5sum広く使用されており、BSDシステムにはmd5より強力なハッシュを計算するユーティリティ(SHA1、SHA256、SHA512、およびその他の利用可能なユーティリティのサポート)もあります。


(「16進数以外の数字」とは、「16進数以外の数字」を意味します。)

おすすめ記事