Intentar arreglar un archivo comparará los CRC locales y centrales, y combinar eso con las pruebas de archivo permitirá verificar todos los CRC. Si tu corres
unzip -t archive.zip
y
zip -F archive.zip --out archivefix.zip
y tampoco se quejan, eso significa que el contenido del archivo coincide con los CRC centrales y locales. (Puede eliminar archivefix.zipdespués).
Para verificar esto, comenzando con el código fuente Info-ZIP para zip3.0, creé un archivo de la siguiente manera:
zip -9 test.zip zip.txt zipup.c
Luego corrompí el directorio central CRC zip.txtcambiando el byte en el desplazamiento 0xB137. Obtuve el comportamiento opuesto a lo que observaste; unzip -vinformó el CRC alterado desde el directorio central, pero unzip -te zip -Tinformó de que el archivo estaba bien (comprobación con la CDN local).
Pero corriendo
zip -F test --out testfix
reportado
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
El archivo "corregido" todavía enumeraba el CRC alterado para zip.txt.
La alteración de la CRC local zip.txten el desplazamiento 0x10 causó ambos unzip -te zip -Tinformar un error de CRC, pero zip -Fno detectó nada malo.
Por lo tanto, a partir de mis experimentos, los desajustes entre el contenido de una entrada de archivo y sus CRC se pueden detectar de la siguiente manera:
- solo local:
zip -Ty unzip -t; zip -Ftambién se quejará de la discordancia local-central
- local y central:
zip -Tyunzip -t
- solo central:
zip -Ty unzip -tno se quejará, pero zip -Findicará un desajuste local-central
(Tenga en cuenta que por defecto zip -Tsimplemente utiliza unzip -tqq, por lo que zip -Ty unzip -trealmente son equivalentes Puede leer el. unzipCódigo fuente para comprobar que las pruebas de un archivo realmente compara el CRC local, no el central, buscar extract_or_test_files(), extract_or_test_entrylist()y extract_or_test_member(), en todo extract.c.)
unzip -t?