아카이브를 수정하려고하면 로컬 및 중앙 CRC를 비교하고이를 아카이브 테스트와 결합하면 모든 CRC를 확인할 수 있습니다. 당신이 실행하는 경우
unzip -t archive.zip
과
zip -F archive.zip --out archivefix.zip
불평하지 않습니다. 즉, 아카이브의 내용이 중앙 CRC와 로컬 CRC 모두와 일치합니다. ( archivefix.zip
나중에 삭제할 수 있습니다 .)
이를 확인하기 위해 Info-ZIP 소스 코드 zip
3.0으로 시작하여 다음과 같이 파일을 작성했습니다.
zip -9 test.zip zip.txt zipup.c
그런 다음 zip.txt
오프셋 0xB137에서 바이트를 변경 하여 중앙 디렉토리 CRC를 손상 시켰습니다. 나는 당신이 관찰 한 것과 반대되는 행동을했습니다. unzip -v
중앙 디렉토리에서 변경 CRC를보고 있지만 unzip -t
및 zip -T
파일 확인 (현지 CRC에 대한 확인)이라고보고했다.
그러나 달리기
zip -F test --out testfix
보고
Fix archive (-F) - assume mostly intact archive
Zip entry offsets do not need adjusting
copying: zip.txt
zip warning: Local Entry CRC does not match CD: zip.txt
copying: zipup.c
"수정 된"파일에는 여전히 변경된 CRC가 나열되어 있습니다 zip.txt
.
에 대한 로컬 CRC를 변경하면 zip.txt
오프셋을 0x10에서 모두 발생 unzip -t
및 zip -T
CRC 오류를보고하지만 zip -F
아무것도 잘못을 발견하지 않았다.
따라서 내 실험에서 아카이브 항목의 내용과 해당 CRC 간의 불일치가 다음과 같이 감지 될 수 있습니다.
- 로컬 전용 :
zip -T
및 unzip -t
; zip -F
또한 지역 중심의 불일치에 대해 불평합니다
- 지역 및 중앙 :
zip -T
및unzip -t
- 중앙 전용 :
zip -T
및 unzip -t
불평하지 않을 것이다, 그러나 zip -F
로컬 중앙 불일치를 나타냅니다
(주 기본은으로 zip -T
간단하게 사용 unzip -tqq
때문에, zip -T
그리고 unzip -t
정말 동일합니다 당신은 읽을 수 있습니다. unzip
아카이브를 테스트하는 것은 정말 지역 CRC가 아닌 중앙 하나 비교 확인하기 위해 소스 코드를,위한 모습 extract_or_test_files()
, extract_or_test_entrylist()
그리고 extract_or_test_member()
, 모두 extract.c
.)
unzip -t
?