
一度は、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進数以外の数字」を意味します。)