2014-09-22 1 views
1

tous. J'utilise une bibliothèque tierce pour archiver/décompresser certains fichiers. Le format d'entrée/sortie est .zip.différences dans le format .zip créé avec winrar et avec 7-zip

Mais j'ai découvert que la lib pouvait bien lire les archives créées avec WinRAR, mais ne pouvait pas lire les archives créées avec 7-zip.

Quelqu'un pourrait-il me dire quel est le problème et comment il pourrait être réparé.

vue hex de départ de l'archive, créé avec WinRAR:

50 4b 03 04 14 00 00 00 08 00 88 25 45 CE 6E 1a ....

vue hexadécimale à partir de l'archive, créé avec 7-zip:

50 4b 03 04 14 00 00 00 08 00 ED 88 25 45 6E 1a ....

la différence est dans les octets EC et ED.

Répondre

0

archives 7-Zip peuvent être créés à l'aide de plusieurs différents compression formats qui ne sont pas compatibles avec les bibliothèques standards de compression/décompression ZIP par exemple à base Info-ZIP code source.

Des applications comme WinRAR et Total Commander supportant la création/extraction de fichiers ZIP utilisent nativement une DLL pour extraire des fichiers d'archives 7-Zip non standard.

Voir la question Puis-je utiliser les fichiers EXE ou DLL de 7-Zip dans une application commerciale? sur FAQ page de 7-Zip.

2

Ceci est la structure d'en-tête d'un fichier ZIP:

+---------------------------------------------------------------------+ 
|        BYTE         | 
|0x0 0x1 0x2 0x3|0x4 0x5|0x6 0x7| 0x8 0x9 |0xA 0xB|0xC 0xD|  | 
+---------------+-------+-------+-----------+--------+--------+-------+ 
| signature |version| flags |compression|mod time|mod date| CRC32 | 
+---------------+-------+-------+-----------+--------+--------+-------+ 
| 50 4B 03 04| 14 00| 00 00| 08 00 |EC/ED 88| 25 45|  | 
+---------------------------------------------------------------------+ 
  • signature est toujours 0x50 0x4B 0x03 0x04 (comme dans votre cas). 0x50 = 'P', 0x4B = 'K' (Phillip Katz)
  • Version nécessaire pour extraire (0x14 0x00 = 20 -> ZIP 2.0)
  • usage général bit drapeaux (pas de drapeaux, votre dossier n'est pas crypted/encodage de la langue par défaut)
  • méthode de compression est dégonfler (08)

Ainsi, les seules choses qui changent est le temps de modification (seulement quelques minutes).

Même les deux premiers octets du CRC32 sont identiques. Si la seule différence est la valeur EC/ED, le problème ne devrait pas être le contenu de l'archive.

Autres références: https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html

Questions connexes