DEFLATE ดิบ (.deflate)
IETF มาตรฐานDEFLATE คืออัลกอริทึมการบีบอัดข้อมูลแบบไม่สูญเสียข้อมูลที่ใช้อย่างแพร่หลายในประวัติศาสตร์คอมพิวเตอร์ ซึ่งขับเคลื่อนไฟล์เก็บถาวร ZIP, สตรีม GZIP, ภาพ PNG และการบีบอัดเว็บ HTTP มานานกว่าสามทศวรรษ
แปลง GZIP เป็น DEFLATE
ตัวแปลงจาก GZIP เป็น DEFLATE ฟรีในเบราว์เซอร์ แปลงไฟล์ได้ทันทีบนอุปกรณ์ของคุณ
ตรวจสอบไฟล์และข้อมูลเมตา
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ DEFLATE โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็นส่วนหัวระดับไบต์
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ DEFLATE โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็น HEX (OFFSET 0):
DEFLATE แบบดิบไม่มีลายเซ็นตายตัว ส่วนสตรีมที่ห่อหุ้มด้วย zlib จะเริ่มด้วยไบต์ CMF/FLG ซึ่งเปลี่ยนแปลงได้การแสดงผลรูปแบบ ASCII: ไม่มีลายเซ็นตายตัว
มาตรฐาน: IETF RFC 1951 / RFC 1950 (zlib)
ข้อมูลจำเพาะทางเทคนิค
| สถาปัตยกรรมคอนเทนเนอร์ | บิตสตรีม RFC 1951 ดิบ หรือสตรีม RFC 1950 ที่ห่อด้วย zlib พร้อมส่วนหัว 2 ไบต์และ checksum Adler-32 |
| การบีบอัด | พจนานุกรมเลื่อน LZ77 (หน้าต่างสูงสุด 32 KB) ร่วมกับการเข้ารหัสเอนโทรปี Huffman แบบไดนามิก/คงที่ |
| การจัดลำดับไบต์ | ลำดับการจัดเรียงบิตแบบ Little-Endian |
| พื้นที่สี | ไม่เกี่ยวข้อง (สตรีมบีบอัดข้อมูล) |
| ช่องสัญญาณและโครงสร้าง | สตรีมข้อมูลไบนารีดิบหรือข้อความ |
| ขนาดสูงสุด | ความยาวสตรีมไม่จำกัด |
| ความโปร่งใส | สร้างข้อมูลกลับคืนโดยไม่สูญเสียและตรงระดับบิต 100% |
| การสตรีมและแบบโปรเกรสซีฟ | บิตสตรีมแบบแบ่งบล็อกรองรับการสตรีมไบต์ต่อเนื่องได้ตามต้องการ |
ตารางเปรียบเทียบทางเทคนิค: DEFLATE กับคู่แข่ง
| คุณลักษณะทางเทคนิค | DEFLATE (ปัจจุบัน) | GZ | BROTLI | ZSTD |
|---|---|---|---|---|
| การกำหนดมาตรฐาน | IETF RFC 1951 (ดิบ) / RFC 1950 (zlib) | IETF RFC 1952 (Gzip) | IETF RFC 7932 (Brotli) | IETF RFC 8878 (Zstandard) |
| หน้าต่างเลื่อน (Sliding Window) | สูงสุด 32 กิโลไบต์ | สูงสุด 32 กิโลไบต์ | สูงสุด 16 เมกะไบต์ | สูงสุด 2 จิกะไบต์ |
| โหมดค่าตรวจสอบ | Adler-32 (ในตัวห่อหุ้ม zlib) | CRC-32 (ในตัวห่อหุ้ม gzip) | ไม่มีสตรีมในตัว | xxHash64 (แฮชเร็ว 64 บิต) |
| การใช้งานประจำวัน | ภาพ PNG, สตรีม PDF, ZIP | Unix .tar.gz, HTTP gzip | ฟอนต์เว็บ (WOFF2), HTTP br | Linux kernel, ฐานข้อมูล, เกม |
รูปแบบความเสียหายทั่วไปและคู่มือการกู้คืน Hex
การคลายการบีบอัดล้มเหลวพร้อมข้อความ 'Z_DATA_ERROR: incorrect data check'
สาเหตุหลัก: ความไม่ตรงกันของค่าตรวจสอบ Adler-32 ขนาด 4 ไบต์ที่ส่วนท้ายของสตรีมที่ห่อหุ้มด้วย zlib
การกู้คืน: ข้ามการตรวจสอบ Adler-32 โดยใช้ RAW inflate หรือซ่อมแซมด้วย File2File.app Deflate Recovery
การวิเคราะห์ความปลอดภัยและเวกเตอร์การโจมตีตัวแยกวิเคราะห์
ตัววิเคราะห์ DEFLATE ต้องตรวจสอบความถูกต้องของรหัสการสร้างต้นไม้ Huffman อย่างเข้มงวดเพื่อป้องกันการเขียนพอยเตอร์นอกขอบเขต
เวกเตอร์การโจมตีที่ทราบ
- ตารางความยาวบิตของต้นไม้ Huffman แบบไดนามิกที่ไม่สมบูรณ์หรือกำหนดรหัสเกินกว่าที่รองรับ ทำให้เกิดการอ่านหน่วยความจำที่ไม่ถูกต้อง
- ระเบิดการคลายการบีบอัด (zip bomb) ที่ขยายเพย์โหลดขนาดเล็กให้กลายเป็น RAM หลายร้อยจิกะไบต์
- การอ่านบัฟเฟอร์เกินขอบเขตในรหัสระยะทางหน้าต่างเลื่อนที่ไม่ได้ตรวจสอบ
แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน: บังคับใช้ขีดจำกัดการจัดสรรหน่วยความจำสูงสุดและขีดจำกัดอัตราการขยายตัวระหว่างการคลายการบีบอัด
ประวัติความเป็นมาและเหตุการณ์สำคัญ
ข้อได้เปรียบและจุดเด่นสำคัญ
- มาตรฐานระดับโลกที่ไม่มีใครเทียบได้: ใช้งานในฮาร์ดแวร์ ระบบปฏิบัติการ และรันไทม์การเขียนโปรแกรมทั้งหมด
- การออกแบบที่ปลอดสิทธิบัตรและไม่มีค่าลิขสิทธิ์ช่วยให้ทุกภาคส่วนในอุตสาหกรรมคอมพิวเตอร์เข้าถึงได้อย่างเปิดกว้าง
- การคลายการบีบอัดที่รวดเร็วด้วยการใช้หน่วยความจำน้อยที่สุด (ใช้หน่วยความจำหน้าต่างเลื่อนขนาด 32 KB เท่านั้น)
ข้อจำกัดทางเทคนิคและข้อควรพิจารณา
- หน้าต่างเลื่อนจำกัดที่ 32 KB ลดประสิทธิภาพการบีบอัดในไฟล์ขนาดใหญ่ที่มีความซ้ำซ้อนในระยะไกล
- อัตราส่วนการบีบอัดบนทรัพยากรเว็บสมัยใหม่ต่ำกว่าอัลกอริทึมใหม่ ๆ เช่น Brotli และ Zstandard
- สตรีม DEFLATE ดิบไม่มีเมทาดาทาที่อธิบายตัวเองได้หรือโครงสร้างคอนเทนเนอร์ หากไม่มีตัวห่อหุ้ม zlib หรือ gzip
เกร็ดความรู้ทางเทคนิคที่น่าสนใจ
- Phil Katz คิดค้น DEFLATE หลังจากถูกฟ้องร้องโดย Unisys เรื่องอัลกอริทึม LZW ที่ได้รับสิทธิบัตรซึ่งใช้ในยูทิลิตี้ PKARC ยุคแรก ๆ
- ไบต์ส่วนหัว zlib มาตรฐาน '78 9C' ระบุการบีบอัดระดับเริ่มต้น, '78 01' ระบุการบีบอัดระดับต่ำ และ '78 DA' ระบุการบีบอัดระดับสูงสุด
- ภาพ PNG ทุกภาพบนโลกใช้ DEFLATE เพื่อบีบอัดส่วนพิกเซล IDAT ของมัน
คำถามทางเทคนิคที่พบบ่อย
ความแตกต่างระหว่าง DEFLATE, zlib และ gzip คืออะไร?
DEFLATE คืออัลกอริทึมการบีบอัดแบบดิบ (RFC 1951) ส่วน Zlib ห่อหุ้ม DEFLATE ด้วยส่วนหัวขนาด 2 ไบต์และค่าตรวจสอบ Adler-32 (RFC 1950) และ Gzip ห่อหุ้ม DEFLATE ด้วยข้อมูลเมตาของไฟล์และค่าตรวจสอบ CRC-32 (RFC 1952)
ทำไม PNG ถึงใช้ DEFLATE?
รูปแบบ PNG ถูกสร้างขึ้นในปี 1995 เพื่อแทนที่ GIF โดยไม่ใช้อัลกอริทึม LZW ที่มีสิทธิบัตร และเลือกใช้ DEFLATE แบบเปิดและไม่มีค่าลิขสิทธิ์สำหรับการบีบอัด
ฉันจะคลายไฟล์ .deflate แบบดิบได้อย่างไร?
คุณสามารถคลายสตรีมไบต์ DEFLATE หรือ zlib แบบดิบให้เป็นไฟล์ต้นฉบับที่ไม่ได้บีบอัดได้ด้วย File2File.app บนเว็บเบราว์เซอร์ของคุณโดยตรง
คู่การแปลงไฟล์ DEFLATE ที่เกี่ยวข้อง
การแปลงสตรีม GZIP เป็น Raw DEFLATE เป็นการถอดส่วนห่อหุ้มไฟล์ด้านนอกและข้อมูลเมตาส่วนหัวออก เหลือไว้เฉพาะเพย์โหลดที่บีบอัดแล้วสำหรับโปรโตคอลเครือข่ายเฉพาะทางและคลังเก็บข้อมูลระดับต่ำ
การแปลง DEFLATE ดิบเป็นสตรีม GZIP เป็นการห่อหุ้มเพย์โหลดที่บีบอัดไว้ภายในคอนเทนเนอร์มาตรฐานที่มีส่วนหัวข้อมูลเมตาเพื่อให้ระบบปฏิบัติการและเครื่องมือเว็บสามารถอ่านได้อย่างถูกต้อง