Сирий DEFLATE (.deflate)

IETF Стандарт

DEFLATE: це широко використовуваний алгоритм стиснення даних без втрат в історії обчислювальної техніки, що понад три десятиліття забезпечує роботу архівів ZIP, потоків GZIP, зображень PNG та вебстиснення HTTP.

Конвертувати з GZIP у DEFLATE

Безкоштовний конвертер з GZIP у DEFLATE у браузері. Миттєво конвертуйте файли на своєму пристрої.

Аналіз та метадані

Операційні системи та аналізатори файлів ідентифікують файли DEFLATE, перевіряючи початкову послідовність бінарних байтів:

Виберіть або перетягніть файли сюди

Приватно - файли ніколи не залишають ваш пристрій

або вставте Ctrl+V
Гарантія конфіденційності без передавання даних мережею: Жодного байта не передано на зовнішні сервери. Уся обробка відбувалася локально в ізольованому середовищі браузера.

Сигнатура заголовка на байтовому рівні (Magic Bytes)

Операційні системи та аналізатори файлів ідентифікують файли DEFLATE, перевіряючи початкову послідовність бінарних байтів:

ШІСТНАДЦЯТКОВА СИГНАТУРА (ЗСУВ 0):

Для сирого DEFLATE фіксованої сигнатури немає; потоки zlib з обгорткою починаються зі змінних байтів CMF/FLG.

ПОДАННЯ В ASCII: Фіксованої сигнатури немає

Стандартизація: IETF RFC 1951 / RFC 1950 (zlib)

Технічні характеристики

Архітектура контейнераСирий бітовий потік RFC 1951 або потік з обгорткою zlib RFC 1950 із 2-байтним заголовком та контрольною сумою Adler-32
СтисненняКовзний словник LZ77 (вікно до 32 КБ) у поєднанні з динамічним/статичним ентропійним кодуванням Хаффмана
Порядок байтів (Endianness)Пакування бітів від молодшого до старшого (Little-Endian)
Колірні просториНе застосовується (потік стиснення даних)
Канали та структураСирий потік бінарних або текстових даних
Максимальні розміриНеобмежена довжина потоку
Прозорість100% точне відтворення даних без втрат
Потокове та прогресивне завантаженняБлоковий бітовий потік підтримує довільне безперервне потокове передавання байтів

Технічна матриця порівняння: DEFLATE проти конкурентів

Технічний атрибутDEFLATE (Поточний)GZBROTLIZSTD
СтандартизаціяIETF RFC 1951 (Сирий) / RFC 1950 (zlib)IETF RFC 1952 (Gzip)IETF RFC 7932 (Brotli)IETF RFC 8878 (Zstandard)
Ковзне вікноМаксимум 32 кілобайтиМаксимум 32 кілобайтиДо 16 мегабайтДо 2 гігабайт
Режим контрольної сумиAdler-32 (в обгортці zlib)CRC-32 (в обгортці gzip)У потоці немає вбудованої контрольної сумиxxHash64 (швидкий 64-бітний хеш)
Щоденне використанняЗображення PNG, потоки PDF, ZIPUnix .tar.gz, HTTP gzipВебшрифти (WOFF2), HTTP brЯдро Linux, бази даних, ігри

Типові режими пошкодження та посібник з відновлення в шістнадцятковому форматі

Розпакування завершується помилкою 'Z_DATA_ERROR: incorrect data check'.

Першопричина: Невідповідність 4-байтової контрольної суми Adler-32 в кінці потоку, оберненого в zlib.

Відновлення: Обійдіть перевірку Adler-32 за допомогою сирого режиму inflate або відновіть за допомогою File2File.app Deflate Recovery.

Аналіз безпеки та векторів атак на парсери

Аналізатори DEFLATE повинні суворо перевіряти побудову кодів дерев Хаффмана, щоб запобігти запису вказівників за межі буфера.

Відомі вектори атак

  • Неповні або переповнені таблиці довжин кодів динамічного дерева Хаффмана, що призводять до некоректного зчитування пам'яті.
  • Бомба розпакування (zip-бомба), що розширює крихітні корисні дані до сотень гігабайтів оперативної пам'яті.
  • Читання за межами буфера через неперевірені коди відстані ковзного вікна.

Рекомендації щодо захисту: Застосовуйте обмеження на максимальний виділений обсяг пам'яті та коефіцієнт розширення під час розпакування.

Історичне походження та віхи

1996Пітер Дойч (Peter Deutsch) формалізує DEFLATE як IETF RFC 1951, а zlib як RFC 1950.
1995Жан-Лу Гаїллі (Jean-loup Gailly) та Марк Адлер (Mark Adler) випускають zlib.
1991Філ Кац (Phil Katz) вигадує DEFLATE для PKZIP 2.0 на заміну застарілим алгоритмам Implode та Reduce.

Основні переваги

  • Беззаперечний глобальний стандарт: реалізований апаратно, в операційних системах та будь-яких середовищах виконання програм.
  • Розробка без патентів і роялті забезпечила відкритий доступ у всій комп'ютерній індустрії.
  • Швидке розпакування з мінімальним обсягом пам'яті (потребує лише 32 КБ пам'яті ковзного вікна).

Технічні обмеження та недоліки

  • Ковзне вікно обмежене розміром у 32 КБ, що знижує ефективність стиснення на великих файлах із віддаленими повторюваними даними.
  • Нижчі коефіцієнти стиснення сучасних вебданих порівняно з новішими алгоритмами, такими як Brotli та Zstandard.
  • Сирі потоки DEFLATE не містять метаданих самоопису чи контейнерної обгортки без обгорток zlib або gzip.

Цікаві технічні факти

  • Філ Кац винайшов 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 безпосередньо у своєму веббраузері.