ZIP
See artikkel ootab keeletoimetamist. (Mai 2026) |
ZIP on failivorming, mis võimaldab andmeid kadudeta pakkida ning hoiustada arhiivis. ZIP arhiiv suudab hoiustada mitut faili, kausta ja ka teisi ZIP arhiive.
ZIP failiformaadi loojaks on Phil Katz.[1]
Ülesehitus
[muuda | muuda lähteteksti].ZIP failid on arhiivid, milles on andmete organiseerimiseks kasutatud päiseid.
Lokaalne failipäis
[muuda | muuda lähteteksti]Iga hoiustatud faili jaoks luuakse lokaalne faili päis (local file header), mis asub enne faili andmeid.
| Suurus baitides | Välja kirjeldus (punkt 4.3.7)[2] |
|---|---|
| 4 | Signatuur (on alati 50 4B 03 04) |
| 2 | Mis zip versiooni on vaja, et andmeid lahti pakkida |
| 2 | Üldine lipp |
| 2 | Pakkimis meetod |
| 2 | Viimane faili muutmise aeg |
| 2 | Viimane faili muutmise kuupäev |
| 4 | CRC-32 pakkimata andmetest |
| 4 | Pakitud andmete kogus |
| 4 | Pakkimata andmete kogus |
| 2 | Failinime suurus (a) |
| 2 | Lisa välja suurus (b) |
| a | Failinimi |
| b | Lisa väli |
Andmete kirjeldus päis
[muuda | muuda lähteteksti]Kui faili pakkimata ja pakitud suurused ei ole lokaalse faili päise kirjutamise ajal teada, siis seatakse vastavate väljade väärtusteks 0. Seatakse ka välja “üldine lipp” kolmas bitt aktiivseks, mis annab märku, et päris faili suurused on andmete kirjeldus päises (data descriptor), mis on leitav kohe peale faili andmeid. (punkt 4.3.9.1)[2]
| Suurus baitides | Välja kirjeldus (punkt 4.3.9)[2] |
|---|---|
| 4 | CRC-32 |
| 4 | Pakitud andmete kogus |
| 4 | Pakkimatta andmete kogus |
Peamine päis
[muuda | muuda lähteteksti]Peale viimase faili andmeid on iga arhiivis oleva faili jaoks eraldi loodud peamine päis (central directory file header), mis lisaks enda unikaalsele informatsioonile sisaldab ka kõiki andmeid, mis olid selle lokaalses faili päises. Selline informatsiooni kordamine muudab ZIP-failid andmekao vastu kindlamaks.[3]
| Suurus baitides | Välja kirjeldus (punkt 4.3.12)[2] |
|---|---|
| 4 | Signatuur (on alati 50 4B 01 02) |
| 2 | Arhiivi versioon |
| 2 | ZIP versioon mida on vaja et andmeid lahti pakkida |
| 2 | Üldine lipp |
| 2 | Pakkimise meetod |
| 2 | Viimane faili muutmise aeg |
| 2 | Viimane faili muutmise kuupäev |
| 4 | CRC-32 pakkimatta andmetest |
| 4 | Pakitud andmete kogus |
| 4 | Pakkimatta andmete kogus |
| 2 | Faili nime suurus (a) |
| 2 | Lisa välja suurus (b) |
| 2 | Faili kommentaari suurus (c) |
| 2 | Ketta number millel algab lokaalne faili päis |
| 4 | Sisemised faili omadused (kas fail on ASCII tekstifail või sisaldab binaar andmeid) |
| 4 | Välised faili omadused (tähendus sõltub “arhiivi versioon” väljast) |
| 4 | Nihe arhiivi algusest kuni faili lokaalse päise alguseni |
| a | Faili nimi |
| b | Lisa väli |
| c | Faili kommentaar |
Lõpu päis
[muuda | muuda lähteteksti]ZIP arhiivi kõige lõpus on lõpu päis (End of central directroy record)
| Suurus baitides | Välja kirjeldus (punkt 4.3.16)[2] |
|---|---|
| 4 | Signatuur (on alati 50 4B 05 06) |
| 2 | Ketta number millel see sama päis asub |
| 2 | Ketta number millel asub esimese faili peamine päis |
| 2 | Peamiste päiste arv sellel kettal |
| 2 | Peamiste päiste arv kokku |
| 4 | Peamiste päiste suurus kokku |
| 4 | Esimese faili peamise päise nihe arhiivi algusest |
| 2 | Kommentaari pikkus (a) |
| a | Kommentaar |
Andmemaht
[muuda | muuda lähteteksti]Kui teha ZIP fail, mis ei hoiusta mitte ühtegi faili, sisaldab loodud ZIP fail ainult lõpu päist. See tähendab, et kõige väiksem ZIP fail, mida on võimalik luua, on 22 baidi suurune.
Vaikimisi kasutavad ZIP arhiivid 32 bitist formaati, et luua päiseid mistõttu suudavad sellised arhiivid hoida 2^32 - 1 baiti. Juhul kui hoiustatud faili maht on suurem kui 0xFFFFFFFF siis luuakse päised ZIP64 formaadi,s mis on võimeline hoiustama 2^64 - 1 baidi suuruseid faile. (punkt 4.3.9.2)[2]
ZIP64
[muuda | muuda lähteteksti]ZIP64 saavutab suurema andmemahu muutes päiste loogikat.
Juhul kui mõne faili lokaalse või peamise päise välja ei mahu andmed ära siis seatakse välja väärtus maksimaalseks. See annab märku, et päris väärtused on ZIP64 lisa väljas, mis paigutatakse päise “Lisa väli” välja. (punkt 4.4.1.4)[2]
ZIP64 lisa väljas on andmed alati samas järjekorras kuid lisatakse ainult andmed mis ei mahtunud nende algsesse päisesse.
| Suurus baitides | Välja kirjeldus (punkt 4.5.3)[2] |
|---|---|
| 2 | Signatuur (0x0001 ütleb et on tegemist ZIP64 lisa väljaga) |
| 2 | Kogu ZIP64 lisa välja suurus |
| 8 | Pakkimatta faili andmete kogus |
| 8 | Pakitud faili andmete kogus |
| 8 | Nihe arhiivi algusest kuni faili lokaalse päise alguseni |
| 4 | Ketta number millel algab faili lokaalne päis |
Lisatakse juurde uus ZIP64 lõpu päis (zip64 end of central directory record) ja ka eraldi väli selle päise leidmiseks (zip64 end of central directory locator).
| Suurus baitides | Välja kirjeldus (punkt 4.3.14)[2] |
|---|---|
| 4 | Signatuur (on alati 50 4B 05 06) |
| 8 | Ülejäänud päise suurus (kogu päise suurus miinus 12 baiti) |
| 2 | Arhiivi versioon |
| 2 | ZIP versioon mida on vaja et andmeid lahti pakkida |
| 4 | Ketta number millel päis asub |
| 4 | Ketta number millel algavad failide peamised päised |
| 8 | Peamiste päiste arv sellel kettal |
| 8 | Peamiste päiste arv kokku |
| 8 | Peamiste päiste suurus kokku |
| 8 | Nihe arhiivi algusest kuni esimese peamise päiseni |
ZIP64 lõpu päise leidja asetatakse ZIP64 lõpu päise ja originaalse lõpu päise vahele.
| Suurus baitides | Välja kirjeldus (punkt 4.3.15)[2] |
|---|---|
| 4 | Signatuur on alati 50 4B 06 07 |
| 4 | Ketta number millel ZIP64 lõpu päis algab |
| 8 | nihe arhiivi algusest ZIP64 lõpu päiseni |
| 4 | Arv mitmel kettal arhiiv on hoiustatud |
Jaotamine
[muuda | muuda lähteteksti]ZIP arhiive on võimalik jagada väiksemateks osadeks (“splitting”) sellisel viisil loodud failide lõppu tuleb .zip asemele .z(n) kus n sõltub loodud failide arvust. Näiteks jagades üks zip arhiiv kolmeks osaks on kõigi failide nimed järgmised: failinimi.z01, failinimi.z02, failinimi.zip.
fail, mille lõppu jääb .zip, sisaldab alati lõpu päist.
ZIP arhiivi erinevaid osasid on võimalik hoiustada erinevatel ketastel (“spanning”). Sellisel juhul võivad jääda kõikide osade nimed identseks ning ZIP arhiivi algusesse pannakse eriline 4 baidine märge “0x08074b50”. (punkt 8.0)[2]
Andmete pakkimine
[muuda | muuda lähteteksti]Vaikimisi kasutatakse andmete pakkimiseks DEFLATE algoritmi.
Võidakse kasutada ka teisi pakkimis meetode nagu näiteks Implode, BZIP2, LZMA, z/OS CMPSC, LZ77, Zstandard, XZ, WavPack ja PPMd (punkt 4.4.5)[2]
ZIP arhiivid võivad hoida andmeid ka pakkimata kujul.
Ohud
[muuda | muuda lähteteksti]ZIP faile, mille eesmärgiks on pakkida kokku võimalikult palju andmeid ning siis üle koormata süsteemi, mille peal fail lahti pakitakse nimetatakse ZIP-pommideks.
Üks tuntuium ZIP-pomm on 42 KB suurune fail nimega 42.zip mille täielikuks lahtipakkimiseks läheks vaja 4,5 petabaiti ruumi.[4]
Viited
[muuda | muuda lähteteksti]- ↑ https://web.archive.org/web/20101001181829/http://www.pkware.com/about-us/phil-katz
- 1 2 3 4 5 6 7 8 9 10 11 12 PKWARE (15. juuli 2020). .ZIP File Format Specification, version 6.3.9. Vaadatud 1. mai 2026.
- ↑ https://web.archive.org/web/20121120090241/http://www.idcnet.us/ziphistory.html
- ↑ https://www.bamsoftware.com/hacks/zipbomb/