فایل ZIP چیست؟
A file with .zip extension is an archive that can hold one or more files or directories. The archive can have compression applied to the included files in order to reduce the ZIP file size. ZIP file format was made public back in February 1989 by Phil Katz for achieving archiving of files and folders. The format was made part of PKZIP utility, created by PKWARE, Inc. Right after the availability of available specifications, many companies made ZIP file format part of their software utilities including Microsoft (since Windows 7), Apple (Mac OS X ) and many others.
تاریخچه مختصر فرمت فایل ZIP
تاریخچه فرمت فایل ZIP به پرونده شکایتی که توسط System Enhancement Associates (SEA) علیه PKWARE به دلیل استفاده از ابزار ARC بدون مجوز برای علامت تجاری آن و حق نسخه برداری ظاهر و رابط کاربری محصول ارائه شد، برمی گردد. قبل از این، فیل کاتز، کد منبع SEA را بازنویسی کرده بود و PKXARC، یک استخراج کننده ARC، و PKARC، یک کمپرسور فایل را به عنوان نرم افزار رایگان برای سیستم های مبتنی بر MS-DOS منتشر کرده بود. PKWARE با شکست در این دعوی دیگر نمیتوانست از هیچ چیز مرتبط با ARC استفاده کند. اینجاست که ایجاد یک فشرده سازی فایل جدید به نام ZIP که بخشی از ابزار PKZIP در PKWARE, Inc.
کاتز مشخصات فرمت فایل ZIP را در دامنه عمومی منتشر کرد، در حالی که حقوق اختصاصی ابزار فشرده سازی و استخراج خود یعنی PKZIP را حفظ کرد. سیستم فشردهسازی ZIP قادر بود (و میتواند) فایلها را در یک پوشه با استفاده از الگوریتم بررسی افزونگی چرخهای 32 بیتی (CRC) برای فشردهسازی اندازه فایلها بایگانی کند. برخلاف ARC، پوشههای .ZIP شامل یک فایل دایرکتوری بود که نقش کتاب کد رمزنگار را بازی میکرد و اطلاعات لازم برای ارائه فایلهای فشرده را در خود نگه میداشت.
روش های فشرده سازی پشتیبانی شده در ZIP
طبق مشخصات فرمت فایل .ZIP، روش های فشرده سازی زیر پشتیبانی می شوند.
فروشگاه - به معنای عدم فشرده سازی است
کوچک شدن
کاهش (این به معنی فاکتورهای فشرده سازی از سطح 1 تا سطح 4 است)
منفجر شدن
باد کردن
Deflat64
BZIP2
LZMA (EFS)
WavPack
PPMd نسخه I، Rev 1
DEFLATE is the commonly used compression method which is a lossless date compression algorithm that uses a combination of the LZ77 and Huffman coding and is detailed in RFC 1951.
مشخصات فرمت فایل ZIP
فایل های ZIP قابلیت ذخیره چندین فایل را با استفاده از تکنیک های فشرده سازی مختلف دارند و در عین حال از ذخیره یک فایل بدون هیچ گونه فشرده سازی پشتیبانی می کنند. هر فایل بهصورت جداگانه ذخیره/فشرده میشود که به استخراج آنها یا افزودن فایلهای جدید بدون اعمال فشردهسازی یا رفع فشردهسازی در کل آرشیو کمک میکند.
فرمت کلی فایل ZIP
ساختار هر فایل Zip به شکل زیر است:
فرمت فایل زیپ |
---|
سربرگ فایل محلی 1 |
داده فایل 1 |
توصیفگر داده 1 |
سربرگ فایل محلی 2 |
داده فایل 2 |
توصیفگر داده 2 |
…. |
…. |
سربرگ فایل محلی N |
داده فایل N |
توصیفگر داده N |
سربرگ رمزگشایی آرشیو |
بایگانی رکورد داده های اضافی |
دایرکتوری مرکزی |
فرمت فایل ZIP از الگوریتم CRC 32 بیتی برای آرشیو کردن استفاده می کند. برای رندر کردن فایلهای فشرده، یک بایگانی ZIP یک دایرکتوری را در انتهای خود نگه میدارد که ورودی فایلهای موجود و مکان آنها را در فایل بایگانی نگه میدارد. بنابراین، نقش رمزگذاری را برای کپسوله کردن اطلاعات لازم برای ارائه فایل های فشرده ایفا می کند. خوانندگان ZIP از دایرکتوری برای بارگذاری لیست فایل ها بدون خواندن کل آرشیو ZIP استفاده می کنند. این قالب کپی های دوگانه از ساختار دایرکتوری را نگه می دارد تا محافظت بیشتری در برابر از دست دادن داده ها ایجاد کند.
هر فایل در یک بایگانی ZIP به عنوان یک ورودی منفرد نشان داده می شود که در آن هر ورودی شامل یک سربرگ فایل محلی و به دنبال آن داده های فایل فشرده است. دایرکتوری در انتهای بایگانی ارجاعات به تمام این ورودی های فایل را نگه می دارد. خوانندگان فایل ZIP باید از خواندن سرصفحه های فایل محلی خودداری کنند و همه انواع لیست فایل ها باید از دایرکتوری خوانده شوند. این دایرکتوری تنها منبع برای ورودی های فایل معتبر در بایگانی است زیرا فایل ها را می توان تا انتهای آرشیو نیز اضافه کرد. به همین دلیل است که اگر یک خواننده سرصفحه های محلی یک بایگانی ZIP را از ابتدا بخواند، ممکن است ورودی های نامعتبر (حذف شده) را بخواند و همچنین بخشی از دایرکتوری در حال حذف از بایگانی نیست.
ترتیب ورودی های فایل در دایرکتوری مرکزی نباید با ترتیب ورودی های فایل در آرشیو منطبق باشد.
ورودی های فایل ZIP
ورودی های فایل ZIP یکی پس از دیگری مرتب می شوند که در آن هر ورودی شامل موارد زیر است:
سربرگ فایل محلی
فیلدهای داده اضافی اختیاری
داده های کاربر (اختیاری فشرده / اختیاری رمزگذاری شده)
سربرگ فایل محلی هر ورودی اطلاعات مربوط به فایل مانند نظر، اندازه فایل و نام فایل را نشان می دهد. فیلدهای داده اضافی (اختیاری) می توانند اطلاعاتی را برای گزینه های توسعه پذیری با فرمت ZIP در خود جای دهند.
سربرگ فایل محلی
سربرگ فایل محلی دارای ساختار فیلد خاصی است که از مقادیر چند بایتی تشکیل شده است. همه مقادیر به ترتیب بایت اندکی ذخیره می شوند که در آن طول فیلد طول را بر حسب بایت می شمارد. تمام ساختارهای یک فایل ZIP از امضاهای 4 بایتی برای هر ورودی فایل استفاده می کنند. انتهای امضای دایرکتوری مرکزی 0x06054b50 است و با امضای منحصر به فرد خود قابل تشخیص است. در زیر ترتیب اطلاعات ذخیره شده در سربرگ فایل محلی آمده است.
Offset | بایت | توضیحات |
---|---|---|
0 | 4 | امضای سرصفحه فایل محلی # 0x04034b50 (خوانده شده به عنوان یک عدد اندین کوچک) |
4 | 2 | نسخه مورد نیاز برای استخراج (حداقل) |
6 | 2 | پرچم بیت هدف عمومی |
8 | 2 | روش فشرده سازی |
10 | 2 | زمان آخرین اصلاح فایل |
12 | 2 | آخرین تاریخ اصلاح فایل |
14 | 4 | CRC-32 |
18 | 4 | سایز فشرده |
22 | 4 | سایز فشرده نشده |
26 | 2 | طول نام فایل (n) |
28 | 2 | طول میدان اضافی (متر) |
30 | n | نام فایل |
30+n | m | فیلد اضافی |
سربرگ فایل دایرکتوری مرکزی
Offset | بایت | توضیحات |
---|---|---|
0 | 4 | امضای هدر فایل دایرکتوری مرکزی # 0x02014b50 |
4 | 2 | نسخه ساخته شده توسط |
6 | 2 | نسخه مورد نیاز برای استخراج (حداقل) |
8 | 2 | پرچم بیت هدف عمومی |
10 | 2 | روش فشرده سازی |
12 | 2 | آخرین زمان اصلاح فایل |
14 | 2 | آخرین تاریخ اصلاح فایل |
16 | 4 | CRC-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 | نظر فایل |
پایان ثبت دایرکتوری مرکزی
Offset | بایت | توضیحات |
---|---|---|
0 | 4 | انتهای امضای دایرکتوری مرکزی # 0x06054b50 |
4 | 2 | شماره این دیسک |
6 | 2 | دیسکی که دایرکتوری مرکزی شروع می شود |
8 | 2 | تعداد رکوردهای دایرکتوری مرکزی روی این دیسک |
10 | 2 | تعداد کل رکوردهای دایرکتوری مرکزی |
12 | 4 | اندازه دایرکتوری مرکزی (بایت) |
16 | 4 | تغییر شروع فهرست مرکزی، نسبت به شروع بایگانی |
20 | 2 | طول نظر (n) |
22 | n | نظر |