อ่าน 11 นาที

ไฟล์ 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การบีบอัดเหมาะกับ
STORE0ไม่บีบอัด เก็บไฟล์ตามเดิมไฟล์ที่ถูกบีบอัดอยู่แล้ว เช่น JPEG, MP4, MP3
DEFLATE8บีบอัดแบบ 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 มากขึ้นเพื่อให้ไฟล์เล็กลง แต่ผลต่างอาจไม่คุ้มเวลาเสมอไป

0STORE ไม่บีบอัดเร็วทันที0%
1DEFLATE แบบเร็วที่สุดเร็วมากประมาณ 50-60%
6สมดุลค่าเริ่มต้นปานกลางประมาณ 60-70%
9DEFLATE สูงสุดช้าประมาณ 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 / ZipCryptoAES-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 →

แหล่งอ้างอิง

  1. PKWARE Inc. .ZIP File Format Specification.
  2. Deutsch, P. (1996). RFC 1951: DEFLATE Compressed Data Format Specification.
  3. ISO/IEC 21320-1:2015. Document Container File - Part 1: Core.
  4. Biham, E. & Kocher, P. (1994). A Known Plaintext Attack on the PKZIP Stream Cipher.
  5. WinZip. AES Encryption Information.
USTHJP