ไฟล์ ZIP คืออะไร?
ไฟล์ที่มีนามสกุล .zip เป็นไฟล์เก็บถาวรที่สามารถเก็บไฟล์หรือไดเร็กทอรีได้ตั้งแต่หนึ่งไฟล์ขึ้นไป ไฟล์เก็บถาวรสามารถใช้การบีบอัดกับไฟล์ที่รวมเพื่อลดขนาดไฟล์ ZIP รูปแบบไฟล์ ZIP เผยแพร่สู่สาธารณะในเดือนกุมภาพันธ์ พ.ศ. 2532 โดย 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 บิต (CRC) เพื่อบีบอัดไฟล์ ขนาด ซึ่งแตกต่างจาก ARC โฟลเดอร์ .ZIP มีไฟล์ไดเร็กทอรีที่ทำหน้าที่เป็นสมุดรหัสของโปรแกรมเข้ารหัส ซึ่งเก็บข้อมูลที่จำเป็นในการแสดงผลไฟล์บีบอัด
วิธีการบีบอัดที่รองรับใน ZIP
ตามข้อกำหนดรูปแบบไฟล์ .ZIP วิธีการบีบอัดต่อไปนี้ได้รับการสนับสนุน
- Store - หมายถึงไม่มีการบีบอัด
- หดตัว
- การลดลง (หมายถึงปัจจัยการบีบอัดตั้งแต่ระดับ 1 ถึงระดับ 4)
- ระเบิด
- ยุบ
- ดีแฟลต 64
- BZIP2
- LZMA (อีเอฟเอส)
- WavPack
- PPMd รุ่น I, Rev 1
DEFLATE เป็นวิธีการบีบอัดที่ใช้กันทั่วไป ซึ่งเป็นอัลกอริทึมการบีบอัดวันที่แบบไม่สูญเสียข้อมูล ซึ่งใช้การเข้ารหัส LZ77 และ Huffman ร่วมกัน และมีรายละเอียดอยู่ใน RFC 1951
ข้อมูลจำเพาะรูปแบบไฟล์ ZIP
ไฟล์ ZIP มีความสามารถในการจัดเก็บไฟล์หลายไฟล์โดยใช้เทคนิคการบีบอัดที่แตกต่างกัน ในขณะเดียวกันก็รองรับการจัดเก็บไฟล์โดยไม่มีการบีบอัด แต่ละไฟล์จะถูกจัดเก็บ/บีบอัดทีละไฟล์ ซึ่งช่วยในการแตกไฟล์หรือเพิ่มไฟล์ใหม่ โดยไม่ใช้การบีบอัดหรือคลายการบีบอัดไฟล์เก็บถาวรทั้งหมด
รูปแบบไฟล์ ZIP โดยรวม
ไฟล์ Zip แต่ละไฟล์มีโครงสร้างในลักษณะต่อไปนี้:
รูปแบบไฟล์ ZIP |
---|
ส่วนหัวของไฟล์ในเครื่อง 1 |
ไฟล์ข้อมูล 1 |
ตัวอธิบายข้อมูล 1 |
ส่วนหัวของไฟล์ในเครื่อง 2 |
ไฟล์ข้อมูล 2 |
ตัวอธิบายข้อมูล 2 |
…. |
…. |
ส่วนหัวของไฟล์ในเครื่อง N |
ไฟล์ข้อมูล N |
ตัวอธิบายข้อมูล N |
เก็บส่วนหัวถอดรหัส |
เก็บบันทึกข้อมูลเพิ่มเติม |
สารบบกลาง |
รูปแบบไฟล์ ZIP ใช้อัลกอริทึม CRC แบบ 32 บิตเพื่อการเก็บถาวร ในการเรนเดอร์ไฟล์บีบอัด ไฟล์เก็บถาวร ZIP จะเก็บไดเร็กทอรีไว้ที่ส่วนท้ายซึ่งเก็บรายการไฟล์ที่มีอยู่และตำแหน่งไฟล์ในไฟล์เก็บถาวร ดังนั้นจึงมีบทบาทในการเข้ารหัสสำหรับการห่อหุ้มข้อมูลที่จำเป็นในการแสดงไฟล์บีบอัด โปรแกรมอ่าน ZIP ใช้ไดเร็กทอรีเพื่อโหลดรายการไฟล์โดยไม่ต้องอ่านไฟล์ ZIP ทั้งหมด รูปแบบจะเก็บสำเนาของโครงสร้างไดเร็กทอรีไว้ 2 ชุดเพื่อป้องกันข้อมูลสูญหายได้มากขึ้น
แต่ละไฟล์ในไฟล์เก็บถาวร ZIP จะแสดงเป็นรายการเดี่ยว โดยแต่ละรายการประกอบด้วย Local File Header ตามด้วยข้อมูลไฟล์ที่บีบอัด ไดเร็กทอรีที่ส่วนท้ายของไฟล์เก็บถาวรจะเก็บการอ้างอิงถึงรายการไฟล์เหล่านี้ทั้งหมด โปรแกรมอ่านไฟล์ ZIP ควรหลีกเลี่ยงการอ่านส่วนหัวของไฟล์ในเครื่อง และควรอ่านรายชื่อไฟล์ทุกประเภทจากไดเร็กทอรี ไดเร็กทอรีนี้เป็นแหล่งเดียวสำหรับรายการไฟล์ที่ถูกต้องในไฟล์เก็บถาวร เนื่องจากไฟล์สามารถต่อท้ายไฟล์เก็บถาวรได้เช่นกัน นั่นคือเหตุผลที่หากผู้อ่านอ่านส่วนหัวในเครื่องของไฟล์ ZIP ตั้งแต่ต้น เครื่องอาจอ่านรายการที่ไม่ถูกต้อง (ถูกลบ) รวมทั้งรายการเหล่านั้นไม่ได้เป็นส่วนหนึ่งของไดเรกทอรีที่ถูกลบออกจากไฟล์เก็บถาวร
ลำดับของรายการไฟล์ในไดเร็กทอรีกลางไม่จำเป็นต้องตรงกับลำดับของรายการไฟล์ในไฟล์เก็บถาวร
รายการไฟล์ ZIP
รายการในไฟล์ ZIP จะถูกจัดเรียงทีละรายการโดยแต่ละรายการประกอบด้วย:
- ส่วนหัวของไฟล์ในเครื่อง
- ฟิลด์ข้อมูลเพิ่มเติมเพิ่มเติม
- ข้อมูลผู้ใช้ (เลือกได้ว่าจะบีบอัด/เข้ารหัสหรือไม่ก็ได้)
Local File Header ของแต่ละรายการแสดงข้อมูลเกี่ยวกับไฟล์ เช่น ความคิดเห็น ขนาดไฟล์ และชื่อไฟล์ ช่องข้อมูลเพิ่มเติม (ไม่บังคับ) สามารถรองรับข้อมูลสำหรับตัวเลือกการขยายของรูปแบบ ZIP
ส่วนหัวของไฟล์ในเครื่อง
Local File Header มีโครงสร้างฟิลด์เฉพาะที่ประกอบด้วยค่าหลายไบต์ ค่าทั้งหมดจะถูกจัดเก็บตามลำดับไบต์แบบ little-endian โดยที่ความยาวของฟิลด์จะนับความยาวเป็นไบต์ โครงสร้างทั้งหมดในไฟล์ ZIP ใช้ลายเซ็น 4 ไบต์สำหรับแต่ละรายการไฟล์ จุดสิ้นสุดของลายเซ็นไดเรกทอรีกลางคือ 0x06054b50 และสามารถแยกความแตกต่างได้โดยใช้ลายเซ็นเฉพาะของตัวเอง ต่อไปนี้เป็นลำดับของข้อมูลที่จัดเก็บไว้ใน Local File Header
ออฟเซ็ต | ไบต์ | คำอธิบาย |
---|---|---|
0 | 4 | ลายเซ็นส่วนหัวของไฟล์ในเครื่อง # 0x04034b50 (อ่านเป็นตัวเลขแบบ little-endian) |
4 | 2 | เวอร์ชันที่ต้องการแยก (ขั้นต่ำ) |
6 | 2 | ค่าสถานะบิตวัตถุประสงค์ทั่วไป |
8 | 2 | วิธีการบีบอัด |
10 | 2 | ไฟล์ เวลาที่แก้ไขล่าสุด |
12 | 2 | วันที่แก้ไขไฟล์ล่าสุด |
14 | 4 | ซีอาร์ซี-32 |
18 | 4 | ขนาดที่บีบอัด |
22 | 4 | ขนาดที่ไม่บีบอัด |
26 | 2 | ความยาวของชื่อไฟล์ (n) |
28 | 2 | ความยาวสนามพิเศษ (ม.) |
30 | n | ชื่อไฟล์ |
30+n | m | ช่องพิเศษ |
ส่วนหัวของไฟล์ไดเรกทอรีกลาง
ออฟเซ็ต | ไบต์ | คำอธิบาย |
---|---|---|
0 | 4 | ลายเซ็นส่วนหัวของไฟล์ไดเรกทอรีกลาง # 0x02014b50 |
4 | 2 | เวอร์ชันที่สร้างโดย |
6 | 2 | เวอร์ชันที่ต้องการแยก (ขั้นต่ำ) |
8 | 2 | ค่าสถานะบิตวัตถุประสงค์ทั่วไป |
10 | 2 | วิธีการบีบอัด |
12 | 2 | ไฟล์ เวลาที่แก้ไขล่าสุด |
14 | 2 | ไฟล์ วันที่แก้ไขล่าสุด |
16 | 4 | ซีอาร์ซี-32 |
20 | 4 | ขนาดที่บีบอัด |
24 | 4 | ขนาดที่ไม่บีบอัด |
28 | 2 | ความยาวของชื่อไฟล์ (n) |
30 | 2 | ความยาวช่องพิเศษ (ม.) |
32 | 2 | ความยาวความคิดเห็นของไฟล์ (k) |
34 | 2 | หมายเลขดิสก์ที่ไฟล์เริ่มต้น |
36 | 2 | แอตทริบิวต์ไฟล์ภายใน |
38 | 4 | แอตทริบิวต์ไฟล์ภายนอก |
42 | 4 | ค่าชดเชยสัมพัทธ์ของส่วนหัวไฟล์ในเครื่อง นี่คือจำนวนไบต์ระหว่างการเริ่มต้นของดิสก์แรกที่ไฟล์เกิดขึ้น และการเริ่มต้นของส่วนหัวของไฟล์ในเครื่อง ซึ่งช่วยให้ซอฟต์แวร์ที่อ่านไดเร็กทอรีกลางสามารถระบุตำแหน่งไฟล์ภายในไฟล์ ZIP ได้ |
46 | n | ชื่อไฟล์ |
46+n | m | ช่องพิเศษ |
46+n+m | k | ความคิดเห็นของไฟล์ |
จบบันทึกสารบบกลาง
ออฟเซ็ต | ไบต์ | คำอธิบาย |
---|---|---|
0 | 4 | จุดสิ้นสุดของลายเซ็นกลางของไดเร็กทอรี # 0x06054b50 |
4 | 2 | จำนวนของดิสก์นี้ |
6 | 2 | ดิสก์ที่ไดเรกทอรีกลางเริ่มต้น |
8 | 2 | จำนวนบันทึกไดเรกทอรีกลางบนดิสก์นี้ |
10 | 2 | จำนวนรวมของบันทึกไดเรกทอรีกลาง |
12 | 4 | ขนาดของไดเรกทอรีกลาง (ไบต์) |
16 | 4 | ออฟเซ็ตของการเริ่มต้นไดเร็กทอรีกลาง สัมพันธ์กับการเริ่มต้นของไฟล์เก็บถาวร |
20 | 2 | ความยาวของความคิดเห็น (n) |
22 | n | ความคิดเห็น |