Τι είναι ένα αρχείο ZIP;
Ένα αρχείο με επέκταση .zip είναι ένα αρχείο που μπορεί να περιέχει ένα ή περισσότερα αρχεία ή καταλόγους. Το αρχείο μπορεί να έχει συμπίεση που εφαρμόζεται στα αρχεία που περιλαμβάνονται προκειμένου να μειωθεί το μέγεθος του αρχείου ZIP. Η μορφή αρχείου ZIP δημοσιοποιήθηκε τον Φεβρουάριο του 1989 από τον Phil Katz για την επίτευξη αρχειοθέτησης αρχείων και φακέλων. Η μορφή έγινε μέρος του βοηθητικού προγράμματος PKZIP, που δημιουργήθηκε από την PKWARE, Inc. Αμέσως μετά τη διαθεσιμότητα των διαθέσιμων προδιαγραφών, πολλές εταιρείες έκαναν τη μορφή αρχείου ZIP μέρος των βοηθητικών προγραμμάτων λογισμικού τους, όπως η Microsoft (από τα Windows 7), η Apple (Mac OS X ) και πολλές άλλες.
Σύντομο ιστορικό της μορφής αρχείου ZIP
Το ιστορικό της μορφής αρχείου ZIP χρονολογείται από την εκδήλωση αγωγής από την System Enhancement Associates (SEA) κατά της PKWARE για χρήση του βοηθητικού προγράμματος ARC χωρίς δικαιώματα για το εμπορικό σήμα και τα πνευματικά δικαιώματα της εμφάνισης και της διεπαφής χρήστη του προϊόντος. Πριν από αυτό, ο Phil Katz, είχε ξαναγράψει τον πηγαίο κώδικα της SEA και είχε κυκλοφορήσει το PKXARC, έναν εξαγωγέα ARC, και τον PKARC, έναν συμπιεστή αρχείων, ως δωρεάν λογισμικό για συστήματα που βασίζονται στο MS-DOS. Χάνοντας στη δίκη, η PKWARE δεν μπορούσε πλέον να χρησιμοποιήσει οτιδήποτε σχετίζεται με το ARC. Εδώ ξεκίνησε η δημιουργία μιας νέας συμπίεσης αρχείων, που ονομάζεται ZIP και έγινε μέρος του βοηθητικού προγράμματος PKZIP στην PKWARE, Inc.
Ο Katz κυκλοφόρησε τις προδιαγραφές μορφής αρχείου ZIP στο δημόσιο τομέα, διατηρώντας παράλληλα τα δικαιώματα ιδιοκτησίας για το βοηθητικό πρόγραμμα συμπίεσης και εξαγωγής, π.χ. PKZIP. Το σύστημα συμπίεσης ZIP ήταν (και είναι) σε θέση να αρχειοθετεί αρχεία σε ένα φάκελο μέσω ενός κυκλικού ελέγχου πλεονασμού 32-bit (CRC) αλγόριθμος για τη συμπίεση του αρχείου μεγέθη. Σε αντίθεση με το ARC, οι φάκελοι .ZIP περιελάμβαναν ένα αρχείο καταλόγου που έπαιζε το ρόλο του βιβλίου κωδικών ενός κρυπτογράφου, που κρατούσε τις απαραίτητες πληροφορίες για την απόδοση των συμπιεσμένων αρχείων.
Υποστηριζόμενες μέθοδοι συμπίεσης σε ZIP
Σύμφωνα με τις προδιαγραφές μορφής αρχείου .ZIP, υποστηρίζονται οι ακόλουθες μέθοδοι συμπίεσης.
- Αποθήκευση - δεν συνεπάγεται συμπίεση
- Συρρίκνωση
- Μείωση (Αυτό συνεπάγεται παράγοντες συμπίεσης που κυμαίνονται από το επίπεδο 1 έως το επίπεδο 4)
- Έκρηξη
- Ξεφούσκωμα
- Deflat64
- BZIP2
- LZMA (EFS)
- WavPack
- Έκδοση PPMd I, Αναθ. 1
Το DEFLATE είναι η συνήθως χρησιμοποιούμενη μέθοδος συμπίεσης που είναι ένας αλγόριθμος συμπίεσης ημερομηνίας χωρίς απώλειες που χρησιμοποιεί έναν συνδυασμό της κωδικοποίησης LZ77 και Huffman και περιγράφεται λεπτομερώς στο RFC 1951.
Προδιαγραφές μορφής αρχείου ZIP
Τα αρχεία ZIP έχουν τη δυνατότητα αποθήκευσης πολλαπλών αρχείων χρησιμοποιώντας διαφορετικές τεχνικές συμπίεσης ενώ ταυτόχρονα υποστηρίζουν την αποθήκευση ενός αρχείου χωρίς καμία συμπίεση. Κάθε αρχείο αποθηκεύεται/συμπιέζεται ξεχωριστά, κάτι που βοηθά στην εξαγωγή τους ή στην προσθήκη νέων, χωρίς να εφαρμόζεται συμπίεση ή αποσυμπίεση σε ολόκληρο το αρχείο.
Συνολική μορφή αρχείου ZIP
Κάθε αρχείο Zip είναι δομημένο με τον ακόλουθο τρόπο:
Μορφή αρχείου ZIP |
---|
Κεφαλίδα τοπικού αρχείου 1 |
Δεδομένα αρχείου 1 |
Περιγραφέας δεδομένων 1 |
Κεφαλίδα τοπικού αρχείου 2 |
Δεδομένα αρχείου 2 |
Περιγραφέας δεδομένων 2 |
…. |
…. |
Κεφαλίδα τοπικού αρχείου N |
Δεδομένα αρχείου N |
Περιγραφέας δεδομένων N |
Κεφαλίδα αποκρυπτογράφησης αρχείου |
Αρχειοθέτηση επιπλέον αρχείου δεδομένων |
Κεντρικός Κατάλογος |
Η μορφή αρχείου ZIP χρησιμοποιεί αλγόριθμο CRC 32-bit για σκοπούς αρχειοθέτησης. Προκειμένου να αποδοθούν τα συμπιεσμένα αρχεία, ένα αρχείο ZIP διατηρεί έναν κατάλογο στο τέλος του που διατηρεί την καταχώρηση των περιεχόμενων αρχείων και τη θέση τους στο αρχείο αρχειοθέτησης. Επομένως, παίζει το ρόλο της κωδικοποίησης για την ενθυλάκωση πληροφοριών που είναι απαραίτητες για την απόδοση των συμπιεσμένων αρχείων. Οι αναγνώστες ZIP χρησιμοποιούν τον κατάλογο για να φορτώσουν τη λίστα αρχείων χωρίς να διαβάσουν ολόκληρο το αρχείο ZIP. Η μορφή διατηρεί διπλά αντίγραφα της δομής καταλόγου για να παρέχει μεγαλύτερη προστασία έναντι της απώλειας δεδομένων.
Κάθε αρχείο σε ένα αρχείο ZIP αντιπροσωπεύεται ως μια μεμονωμένη καταχώρηση όπου κάθε καταχώρηση αποτελείται από μια κεφαλίδα τοπικού αρχείου ακολουθούμενη από τα συμπιεσμένα δεδομένα αρχείου. Ο Κατάλογος στο τέλος της αρχειοθέτησης περιέχει τις αναφορές σε όλες αυτές τις εγγραφές αρχείων. Οι αναγνώστες αρχείων ZIP θα πρέπει να αποφεύγουν την ανάγνωση των τοπικών κεφαλίδων αρχείων και κάθε είδους λίστα αρχείων θα πρέπει να διαβάζεται από τον Κατάλογο. Αυτός ο Κατάλογος είναι η μόνη πηγή για έγκυρες καταχωρίσεις αρχείων στο αρχείο, καθώς τα αρχεία μπορούν να προσαρτηθούν και προς το τέλος του αρχείου. Αυτός είναι ο λόγος για τον οποίο εάν ένας αναγνώστης διαβάσει τις τοπικές κεφαλίδες ενός αρχείου ZIP από την αρχή, μπορεί να διαβάσει μη έγκυρες (διαγραμμένες) εγγραφές, καθώς και αυτές που δεν αποτελούν μέρος του Καταλόγου που διαγράφεται από το αρχείο.
Η σειρά των καταχωρήσεων αρχείων στον κεντρικό κατάλογο δεν χρειάζεται να συμπίπτει με τη σειρά των καταχωρήσεων αρχείων στο αρχείο.
Εγγραφές αρχείου ZIP
Οι εγγραφές στο αρχείο ZIP ταξινομούνται η μία μετά την άλλη όπου κάθε καταχώρηση αποτελείται από:
- Κεφαλίδα τοπικού αρχείου
- Προαιρετικά επιπλέον πεδία δεδομένων
- Δεδομένα χρήστη (προαιρετικά συμπιεσμένα/προαιρετικά κρυπτογραφημένα)
Η κεφαλίδα τοπικού αρχείου κάθε καταχώρισης αντιπροσωπεύει πληροφορίες σχετικά με το αρχείο, όπως σχόλιο, μέγεθος αρχείου και όνομα αρχείου. Τα επιπλέον πεδία δεδομένων (προαιρετικά) μπορούν να φιλοξενήσουν πληροφορίες για επιλογές επεκτασιμότητας της μορφής ZIP.
Κεφαλίδα τοπικού αρχείου
Η κεφαλίδα τοπικού αρχείου έχει συγκεκριμένη δομή πεδίου που αποτελείται από τιμές πολλών byte. Όλες οι τιμές αποθηκεύονται με σειρά λίγων byte, όπου το μήκος πεδίου μετράει το μήκος σε byte. Όλες οι δομές σε ένα αρχείο ZIP χρησιμοποιούν υπογραφές 4 byte για κάθε καταχώρηση αρχείου. Το τέλος της υπογραφής κεντρικού καταλόγου είναι 0x06054b50 και μπορεί να διακριθεί χρησιμοποιώντας τη δική του μοναδική υπογραφή. Ακολουθεί η σειρά των πληροφοριών που είναι αποθηκευμένες στην κεφαλίδα τοπικού αρχείου.
Offset | Byte | Περιγραφή |
---|---|---|
0 | 4 | Υπογραφή κεφαλίδας τοπικού αρχείου # 0x04034b50 (διαβάζεται ως αριθμός μικρότερος) |
4 | 2 | Απαιτείται έκδοση για εξαγωγή (ελάχιστο) |
6 | 2 | Σημαία bit γενικής χρήσης |
8 | 2 | Μέθοδος συμπίεσης |
10 | 2 | Χρόνος τελευταίας τροποποίησης αρχείου |
12 | 2 | Ημερομηνία τελευταίας τροποποίησης αρχείου |
14 | 4 | CRC-32 |
18 | 4 | Συμπιεσμένο μέγεθος |
22 | 4 | Ασυμπίεστο μέγεθος |
26 | 2 | Μήκος ονόματος αρχείου (n) |
28 | 2 | Επιπλέον μήκος πεδίου (m) |
30 | n | Όνομα αρχείου |
30+n | m | Επιπλέον πεδίο |
Κεφαλίδα αρχείου κεντρικού καταλόγου
Offset | Byte | Περιγραφή |
---|---|---|
0 | 4 | Υπογραφή κεφαλίδας αρχείου κεντρικού καταλόγου # 0x02014b50 |
4 | 2 | Έκδοση από |
6 | 2 | Απαιτείται έκδοση για εξαγωγή (ελάχιστο) |
8 | 2 | Σημαία bit γενικής χρήσης |
10 | 2 | Μέθοδος συμπίεσης |
12 | 2 | Χρόνος τελευταίας τροποποίησης αρχείου |
14 | 2 | Ημερομηνία τελευταίας τροποποίησης αρχείου |
16 | 4 | CRC-32 |
20 | 4 | Συμπιεσμένο μέγεθος |
24 | 4 | Ασυμπίεστο μέγεθος |
28 | 2 | Μήκος ονόματος αρχείου (n) |
30 | 2 | Επιπλέον μήκος πεδίου (m) |
32 | 2 | Μήκος σχολίου αρχείου (k) |
34 | 2 | Αριθμός δίσκου όπου ξεκινά το αρχείο |
36 | 2 | Εσωτερικά χαρακτηριστικά αρχείου |
38 | 4 | Χαρακτηριστικά εξωτερικού αρχείου |
42 | 4 | Σχετική μετατόπιση κεφαλίδας τοπικού αρχείου. Αυτός είναι ο αριθμός των byte μεταξύ της έναρξης του πρώτου δίσκου στον οποίο εμφανίζεται το αρχείο και της έναρξης της κεφαλίδας του τοπικού αρχείου. Αυτό επιτρέπει στο λογισμικό που διαβάζει τον κεντρικό κατάλογο να εντοπίσει τη θέση του αρχείου μέσα στο αρχείο ZIP. |
46 | n | Όνομα αρχείου |
46+n | m | Επιπλέον πεδίο |
46+n+m | k | Σχόλιο αρχείου |
Τέλος εγγραφής κεντρικού καταλόγου
Offset | Byte | Περιγραφή |
---|---|---|
0 | 4 | Τέλος υπογραφής κεντρικού καταλόγου # 0x06054b50 |
4 | 2 | Αριθμός αυτού του δίσκου |
6 | 2 | Δίσκος όπου ξεκινά ο κεντρικός κατάλογος |
8 | 2 | Αριθμός εγγραφών κεντρικού καταλόγου σε αυτόν τον δίσκο |
10 | 2 | Συνολικός αριθμός εγγραφών κεντρικού καταλόγου |
12 | 4 | Μέγεθος κεντρικού καταλόγου (byte) |
16 | 4 | Μετατόπιση έναρξης κεντρικού καταλόγου, σε σχέση με την αρχή του αρχείου |
20 | 2 | Μήκος σχολίου (n) |
22 | n | Σχόλιο |