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.

Perl crc32스크립트는 매우 짧으며 다음과 같은 내용을 포함합니다.

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진수가 아닌 숫자가 하나 이상 옵니다.이 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진수가 아닌 숫자"를 의미합니다.)

관련 정보