ไฟล์ ZIP คืออะไร? การบีบอัดไฟล์และ Archive ทำงานอย่างไร
ZIP คือรูปแบบ archive ที่ใช้แพร่หลายที่สุดรูปแบบหนึ่งในคอมพิวเตอร์ ไม่ว่าจะส่งโฟลเดอร์ทางอีเมล ดาวน์โหลดซอฟต์แวร์ หรือสำรองไฟล์ คุณน่าจะเคยใช้ไฟล์ ZIP มาแล้ว มาดูกันว่า ZIP ทำงานอย่างไร ทำไมจึงมีประโยชน์ และมีตัวเลือกอะไรบ้าง
สารบัญ
ไฟล์ ZIP คืออะไร?
ไฟล์ ZIP คือ container format ที่รวมไฟล์หนึ่งไฟล์หรือหลายไฟล์ไว้ใน compressed archive เดียว โดยทำสองงานพร้อมกันคือ archiving หรือการรวมไฟล์ และ compression หรือการลดขนาดข้อมูล
ZIP ใช้การบีบอัดแบบ lossless หมายความว่าข้อมูลต้นฉบับถูกเก็บครบถ้วน เมื่อแตกไฟล์ ZIP จะได้ไฟล์เดิมกลับมาแบบ bit-for-bit ต่างจาก JPEG หรือ MP3 ที่เป็น lossy compression และยอมทิ้งข้อมูลบางส่วนเพื่อให้ไฟล์เล็กลง
ไฟล์ ZIP ใช้นามสกุล .zip และมักขึ้นต้นด้วย magic bytes PK ตามชื่อ Phil Katz ผู้สร้างรูปแบบนี้ ระบบปฏิบัติการหลักอย่าง Windows, macOS, Linux, Android และ iOS เปิดไฟล์ ZIP ได้โดยไม่ต้องติดตั้งโปรแกรมเพิ่ม
ประวัติของ ZIP โดยย่อ
รูปแบบ ZIP ถูกสร้างโดย Phil Katz ในปี 1989 และเผยแพร่พร้อมโปรแกรม PKZIP จุดสำคัญคือ Katz เปิด specification ให้ผู้อื่นสร้างเครื่องมือที่เข้ากันได้ จึงทำให้ ZIP แพร่หลายอย่างรวดเร็ว
- 1989 - PKZIP รุ่นแรกเผยแพร่พร้อม specification ของ ZIP
- 1993 - เพิ่มอัลกอริทึม DEFLATE ทำให้อัตราบีบอัดดีขึ้นมาก
- 2001 - เพิ่ม ZIP64 เพื่อลบข้อจำกัดไฟล์ 4 GB
- 2003 - เพิ่มการเข้ารหัส AES ใน ZIP specification
- ปัจจุบัน - ไฟล์อย่าง .docx, .xlsx, .jar, .apk และ .epub ล้วนเป็น ZIP container ในอีกนามสกุลหนึ่ง
การบีบอัด ZIP ทำงานอย่างไร
ZIP บีบอัดแต่ละไฟล์ใน archive แบบแยกกัน ต่างจาก TAR.GZ ที่รวมไฟล์แล้วบีบอัดเป็น stream เดียว ข้อดีคือสามารถแตกไฟล์ใดไฟล์หนึ่งออกมาได้โดยไม่ต้องคลายข้อมูลทั้ง archive
| วิธี | ID | การบีบอัด | เหมาะกับ |
|---|---|---|---|
| STORE | 0 | ไม่บีบอัด เก็บไฟล์ตามเดิม | ไฟล์ที่ถูกบีบอัดอยู่แล้ว เช่น JPEG, MP4, MP3 |
| DEFLATE | 8 | บีบอัดแบบ lossless ด้วย LZ77 + Huffman coding | ข้อความ เอกสาร source code และ data files |
อัลกอริทึม DEFLATE
DEFLATE คือหัวใจของการบีบอัด ZIP โดยรวมเทคนิคสองแบบเข้าด้วยกัน: LZ77 หา pattern ที่ซ้ำแล้วแทนด้วย back-reference และ Huffman coding ให้รหัสสั้นกับข้อมูลที่พบบ่อยและรหัสยาวกับข้อมูลที่พบน้อย
Example: "ABCABCABC"
Store A B C once
Then reference previous 3 bytes twice
Result: fewer bytes, same original data after extractionอัลกอริทึมเดียวกันนี้ยังใช้ใน gzip, PNG และ HTTP compression ด้วย ประสิทธิภาพขึ้นอยู่กับชนิดข้อมูล ไฟล์ข้อความหรือ source code มักเล็กลงมาก ส่วน JPEG, MP4 หรือ MP3 ที่ถูกบีบอัดอยู่แล้วมักไม่เล็กลงเท่าไร
ระดับการบีบอัด 0-9
เครื่องมือ ZIP ส่วนใหญ่ให้เลือกระดับ 0 ถึง 9 ยิ่งระดับสูงยิ่งใช้เวลาหา pattern มากขึ้นเพื่อให้ไฟล์เล็กลง แต่ผลต่างอาจไม่คุ้มเวลาเสมอไป
| 0 | STORE ไม่บีบอัด | เร็วทันที | 0% |
| 1 | DEFLATE แบบเร็วที่สุด | เร็วมาก | ประมาณ 50-60% |
| 6 | สมดุลค่าเริ่มต้น | ปานกลาง | ประมาณ 60-70% |
| 9 | DEFLATE สูงสุด | ช้า | ประมาณ 65-75% |
เคล็ดลับ: ไฟล์ที่ถูกบีบอัดอยู่แล้ว เช่น JPEG, PNG, MP4, MP3 หรือ PDF มักไม่เล็กลงมาก ใช้ STORE หรือระดับต่ำเพื่อประหยัดเวลาได้
โครงสร้างภายในไฟล์ ZIP
ZIP archive มีสามส่วนหลัก: local file header กับข้อมูลไฟล์ของแต่ละรายการ, central directory ที่ทำหน้าที่เหมือน index ของไฟล์ทั้งหมด และ end of central directory record ที่บอกตำแหน่งของ index
- Local File Header: metadata ของแต่ละไฟล์ เช่น ชื่อไฟล์ ขนาด CRC-32 และวิธีบีบอัด
- Central Directory: index ท้าย archive ที่ช่วยกระโดดไปยังไฟล์ใดไฟล์หนึ่งได้โดยไม่ต้องอ่านทั้งหมด
- EOCD: record ท้ายไฟล์ที่บอกว่า central directory เริ่มตรงไหน
แต่ละไฟล์มี CRC-32 checksum เพื่อให้โปรแกรมตรวจสอบได้ว่าข้อมูลเสียหายระหว่างเก็บหรือส่งต่อหรือไม่
การเข้ารหัส ZIP: ZipCrypto vs AES-256
| ความปลอดภัย | อ่อนแอ แตกได้ด้วย known-plaintext attacks | แข็งแรงมาก ใช้กับข้อมูลสำคัญได้ดีกว่า |
| ความเร็ว | เร็วมาก | ช้ากว่าเล็กน้อยแต่แทบไม่รู้สึกในเครื่องสมัยใหม่ |
| ความเข้ากันได้ | เครื่องมือ ZIP แทบทั้งหมดรองรับ | รองรับกว้าง เช่น 7-Zip, WinRAR และ macOS Archive Utility |
| คำแนะนำ | หลีกเลี่ยงกับข้อมูลละเอียดอ่อน | เลือกใช้เมื่อจริงจังเรื่องความปลอดภัย |
สำคัญ: แม้ใช้ AES-256 ไฟล์ ZIP โดยทั่วไปเข้ารหัสเฉพาะเนื้อหาไฟล์ แต่ชื่อไฟล์ ขนาด และ metadata ใน central directory อาจยังมองเห็นได้ ถ้าชื่อไฟล์เป็นความลับควรพิจารณา 7z ที่เข้ารหัส directory listing ได้
ZIP64 และขีดจำกัด 4 GB
ZIP รุ่นเดิมใช้ field ขนาด 32-bit ทำให้ไฟล์เดี่ยวและ archive มีขีดจำกัดประมาณ 4 GiB และจำนวนไฟล์สูงสุด 65,535 รายการ ZIP64 ขยาย field เป็น 64-bit จึงรองรับไฟล์และ archive ขนาดใหญ่มากได้
เครื่องมือสมัยใหม่มักสร้าง ZIP64 ให้อัตโนมัติเมื่อจำเป็น แต่เครื่องมือเก่ามาก เช่น ZIP support ใน Windows XP อาจเปิดไฟล์ ZIP64 ไม่ถูกต้อง
ZIP เทียบกับ archive format อื่น
| การบีบอัด | ดี ใช้ DEFLATE | ดีเยี่ยม ใช้ LZMA2 | ดีมาก | ดี ใช้ gzip/DEFLATE |
| รองรับใน OS | รองรับในทุก OS หลัก | จำกัดกว่า | จำกัดกว่า | ดีบน Linux/macOS |
| เข้าถึงไฟล์เดี่ยว | ได้ | ได้ | ได้ | มักต้องอ่านตามลำดับ |
| เข้ารหัส | AES-256 / ZipCrypto | AES-256 และซ่อนชื่อไฟล์ได้ | AES-256 และซ่อนชื่อไฟล์ได้ | ไม่มีในตัว |
จุดแข็งที่สุดของ ZIP คือความเป็นสากล ทุกระบบปฏิบัติการหลักเปิดได้โดยไม่ต้องติดตั้งเพิ่ม ถ้าต้องการบีบอัดให้เล็กที่สุด 7z อาจดีกว่า แต่ผู้รับต้องมีเครื่องมือที่รองรับ
ควรใช้ ZIP เมื่อไร
- ต้องแชร์ไฟล์ผ่านอีเมลหรือ cloud และอยากให้ผู้รับเปิดได้ง่าย
- ต้องรวมหลายไฟล์หรือหลายโฟลเดอร์เป็นไฟล์เดียวสำหรับดาวน์โหลด
- แจกจ่ายซอฟต์แวร์หรือไฟล์ release ที่ต้องเข้ากันได้กว้าง
- ต้องตั้งรหัสผ่านและใช้ AES-256 เพื่อป้องกันเนื้อหาไฟล์
ควรพิจารณา format อื่นเมื่อเน้นอัตราบีบอัดสูงสุด ต้องซ่อนชื่อไฟล์ หรือต้องเก็บ Unix permissions และ symlinks อย่างแม่นยำบน Linux/macOS
ใช้งาน ZIP ในโค้ด
ภาษาโปรแกรมหลัก ๆ รองรับ ZIP ผ่าน standard library หรือ package ที่นิยม เช่น JavaScript ใช้ JSZip, Python ใช้ zipfile และ command line ใช้ zip, unzip, Compress-Archive หรือ Expand-Archive
# Linux / macOS
zip -r archive.zip folder/
unzip archive.zip -d output/
# Windows PowerShell
Compress-Archive -Path .\folder -DestinationPath archive.zip
Expand-Archive -Path archive.zip -DestinationPath output\สร้างและแตกไฟล์ ZIP ออนไลน์
ใช้ ZIP Converter ฟรีเพื่อสร้าง ZIP archive พร้อม AES-256 encryption และปรับระดับการบีบอัด หรือแตกไฟล์ ZIP ได้ในเบราว์เซอร์โดยไม่ต้องอัปโหลดไฟล์
เปิด ZIP Converter →แหล่งอ้างอิง
- PKWARE Inc. .ZIP File Format Specification.
- Deutsch, P. (1996). RFC 1951: DEFLATE Compressed Data Format Specification.
- ISO/IEC 21320-1:2015. Document Container File - Part 1: Core.
- Biham, E. & Kocher, P. (1994). A Known Plaintext Attack on the PKZIP Stream Cipher.
- WinZip. AES Encryption Information.