fileformer
search⌘KtranslateENexpand_moreupload_fileConvert
Converters8 file families · 44 direct conversions
What changes in a conversionarrow_forward

Convert ZIP Archive Free

Why zipping shrinks a report but barely touches your photos.

A ZIP squeezes each file separately by finding repeated patterns. Text and spreadsheets are full of repetition; photos, videos and music are already compressed, so there's nothing left to find. Add files to the folder and watch the archive size.

project-files/ · click to add or remove5 of 10 files · 5.8 MB
descriptionreport.docx480 KB−7%notesnotes.txt220 KB−66%table_viewsales.csv1.8 MB−82%codesite.html140 KBaddreceipt_longapp.log5.1 MBaddphotoholiday.jpg3.3 MB−1%movieclip.mp446.9 MBaddmusic_notesong.mp37.6 MBaddimagelogo.png90 KB−3%grid_onbudget.xlsx260 KBadd
Store onlyNormalMaximum
project-files.zipDeflate, normal
files in5.8 MBzip size4.2 MB
where the saving comes from28% smaller
textofficemediaremaining
Most of the saving comes from the text files. Logs and CSVs often shrink to a tenth of their size.
~/read-from-the-end

A ZIP's table of contents is at the very end.

Each file is stored with a small header in front of it, one after another. The full list of what's inside, with every file's position, comes last. A program opening a ZIP jumps to the end first, then straight to the file you want. The thin strips are headers, the wide blocks are file data; click any block to see what it holds.

docxtxtcsvjpgpngdirectoryend
Local file headerSits right in front of each file’s data. It repeats the name and sizes, so a damaged ZIP can often be recovered by scanning for these headers.
signaturePK 03 04file namereport.docxmethoddeflate (8)CRC-32 checka1b2c3d4
~/every-byte

A real ZIP, every byte labelled.

This is a complete, valid archive built in your browser from the name and text below: one stored file, its central directory entry and the end record. Edit either box and the sizes, offsets and CRC-32 checksum are recomputed. Click any byte to decode the field it belongs to.

121 bytes total
Local file header30 BFile name9 BFile data5 BCentral directory55 BEnd of central directory22 B
0000
504B03040A00000000000060415D86A6
PK.........`A]..
0010
10360500000005000000090000006865
.6............he
0020
6C6C6F2E74787468656C6C6F504B0102
llo.txthelloPK..
0030
1E030A00000000000060415D86A61036
.........`A]...6
0040
05000000050000000900000000000000
................
0050
01000000A4810000000068656C6C6F2E
..........hello.
0060
747874504B0506000000000100010037
txtPK..........7
0070
0000002C0000000000
...,.....
Local file headerSignature
offset0 (0x0)length4 bytesraw bytes50 4B 03 04reads asPK + 03 04
The magic number: “PK” for Phil Katz, then 03 04. File-type detectors recognise a ZIP by these four bytes at offset 0.
chevron_leftPrevious fieldNext fieldchevron_rightfield 1 of 39
~/four-gigabyte-wall

Where classic ZIP runs out of room, and what ZIP64 changes.

The original format stores file counts in 16 bits and sizes and offsets in 32 bits. Past 65,535 files or 4 GiB those fields overflow. ZIP64, added in 2001, keeps the old fields but fills them with FF placeholders and writes the real 64-bit values elsewhere. Describe an archive and see which limits it hits.

The central directory alone takes about 70 KB for 1,000 files: 46 bytes per entry plus its name. Estimated archive size 4.0 GB.
File count1,000 · 2% of limit
16-bit counts in the end recordlimit 65,535
Largest file1.0 GB · 23% of limit
32-bit size fields in every headerlimit 4 GiB
Offset of the last file4.0 GB · 93% of limit
32-bit offsets in the directory and end recordlimit 4 GiB
fits a classic ZIPcheck_circleClassic ZIP holds everythingEvery count, size and offset fits its 16- or 32-bit field. No ZIP64 records are written, and any unzip tool can read the result.
~/locked-zips

A password on a ZIP can mean two very different things.

ZIP has an old encryption method from 1989 and a modern one. Both ask for a password, and they look the same when you open the file. Only one of them actually protects the contents.

ZipCryptoweakThe original method, still the default in some tools because Windows can open it without extra software. It was broken in the 1990s.
cancelCan be cracked in minutes if one file inside is knowncancelFile names stay readable without the passwordcheck_circleOpens in Windows Explorer and every unzip toolinfoFine to stop casual snooping, nothing more
AES-256strongThe modern method, added by WinZip in 2003. With a long password it can’t realistically be broken.
check_circleThe same encryption banks and governments usecancelFile names still visible unless the tool hides theminfoWindows Explorer can’t open it; needs 7-Zip or similarcheck_circleThe right choice for anything sensitive
~/secretly-zip

Many files you open every day are ZIPs in disguise.

Word documents, spreadsheets, ebooks, Java programs and Android apps are ZIP archives with an agreed set of files inside. Rename one to .zip and any unzip tool opens it. Since they all start with the same PK bytes, software has to look inside to tell them apart.

descriptionDOCXgrid_onXLSXarticleODTmenu_bookEPUBcoffeeJARandroidAPK
inside report.docx[Content_Types].xmlMaps every part to a content type_rels/.relsPoints to the main document partword/document.xmlThe text and its formattingword/styles.xmlStyle definitionsword/media/image1.pngEmbedded pictures, stored as-is
MIME typeapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentDefined byECMA-376 · ISO/IEC 29500 (Open Packaging Conventions)How software recognises itThe first entry’s name isn’t fixed, so detectors look for [Content_Types].xml at the root and a word/ folder.How DOCX worksarrow_forward
~/two-indexes

Every ZIP describes each file twice. Open one and see whether both copies agree.

Each file has a local header in front of its data and a second entry in the central directory at the end. Most tools read only one of the two, so when they disagree, two programs see two different archives. This page reads both, compares them field by field and decodes every extra field. It also infers the creator’s time zone from the timestamps and checks every CRC by decompressing each file in your browser. Then it writes a clean, reproducible copy without recompressing anything. It all runs on your device, and large archives work, because only headers are read up front.

Project.zip · 1.8 KBCRC: 6 ok
every byte of the file, to scale
Local headers35.9%File data12.4%Data descriptors5.2%OS clutter files10.9%Central directory34.4%End record1.2%
file size1.8 KBfiles · folders6 · 3unpacked14.7 KBratio3%headers + index1.4 KBclutter203 B
What the end records say
Entries9 declared · 9 found
Formatclassic ZIP (32-bit)
Central directory642 B at offset 1,200
Offsetsfrom file start
Created onUnix
Creator time zoneUTC+1
Unix owneruid:gid 501:20
Methodsstored, deflate
Header disagreementsnone
Unreferenced bytesnone
Commentnone
info4 entries are operating-system clutter (Finder folder settings (.DS_Store), macOS resource fork (__MACOSX)), 203 B in total. macOS Finder adds these when compressing; recipients on Windows see a stray __MACOSX folder.
warning2 names are UTF-8 without the UTF-8 flag (bit 11): “Project/Résumé.pdf”. macOS Archive Utility writes names this way. Readers that follow the spec decode them as code page 437, so Windows Explorer shows “Project/R├⌐sum├⌐.pdf”.
warning1 symbolic link (Unix mode 120xxx). Unzipped on Unix, it points wherever the stored text says, which can be outside the folder. Windows extractors write a small text file instead.
info1 file is marked executable (run.sh). The mode survives unzip on macOS and Linux; Windows ignores it.
info6 entries use data descriptors (flag bit 3). The writer streamed the data and wrote CRC and sizes after it, leaving zeros in the local header. Streaming readers must decompress to find the end, and stored entries with descriptors cannot be streamed at all.
infoThe creator’s clock was set to UTC+1: DOS times are local, and 9 of 9 entries also carry a real UTC time, so the gap gives away the time zone (and whether summer time was on). Stripping extra fields or fixing timestamps removes this.
Central directory9 entries
#NameMethodSize → packedModified (DOS)Made on · modeExtra fieldsCRC-32
1Project/storedfolder2026-10-02 10:30:00Unix · drwxr-xr-xUT ux-
2Project/Résumé.pdfUTF-8 without flag: Windows shows “Project/R├⌐sum├⌐.pdf” · data descriptordeflate3.2 KB → 114 B2026-10-02 10:30:00Unix · -rw-r--r--UT ux✓ 5C4951D9
3Project/notes.txtdata descriptordeflate1.5 KB → 86 B2026-10-02 10:30:00Unix · -rw-r--r--UT ux✓ 4E2DB8EA
4Project/run.shdata descriptorstored23 B → 23 B2026-10-02 10:30:00Unix · -rwxr-xr-xUT ux✓ B8C20BC0
5Project/latestsymlink · data descriptorstored9 B → 9 B2026-10-02 10:30:00Unix · lrwxr-xr-xUT ux✓ 2694521B
6Project/.DS_StoreFinder folder settings (.DS_Store) · data descriptordeflate6.0 KB → 109 B2026-10-02 10:30:00Unix · -rw-r--r--UT ux✓ 45E995C4
7__MACOSX/macOS resource fork (__MACOSX)storedfolder2026-10-02 10:30:00Unix · drwxr-xr-xUT ux-
8__MACOSX/Project/macOS resource fork (__MACOSX)storedfolder2026-10-02 10:30:00Unix · drwxr-xr-xUT ux-
9__MACOSX/Project/._Résumé.pdfUTF-8 without flag: Windows shows “__MACOSX/Project/._R├⌐sum├⌐.pdf” · macOS resource fork (__MACOSX) · data descriptordeflate4.0 KB → 94 B2026-10-02 10:30:00Unix · -rw-r--r--UT ux✓ 947E5583
Click a row to compare its two headers below. DOS times have 2-second resolution and no time zone; the extended timestamp (UT) and NTFS fields store real UTC, which is how the creator’s offset is worked out.
#1 · Project/local at 0 · central at 1,200
FieldLocal headerCentral directory
NameProject/Project/check
Version needed2.02.0check
Flags0x00000x0000check
Methodstoredstoredcheck
DOS time2026-10-02 10:30:002026-10-02 10:30:00check
CRC-320000000000000000check
Packed size00check
Size00check
Extra fields28 B9 B
Made by-Unix, spec 2.1
External attributes-0x41ED0010 · drwxr-xr-x (755)
Comment-none
The central directory is what nearly every extractor uses. The local header is what streaming readers (and anything recovering a damaged archive) rely on.
Extra fields, decoded
0x5455local · 9 BExtended timestamp (UT)flags 03 · modified 2026-10-02 09:30:00 UTC · accessed 2026-10-02 09:31:00 UTC
0x7875local · 11 BInfo-ZIP Unix UID/GID (ux)uid 501 · gid 20 (the first macOS user account, group staff)
0x5455central · 5 BExtended timestamp (UT)flags 01 · modified 2026-10-02 09:30:00 UTC
UTCinferredDOS time vs UTC timeDOS 2026-10-02 10:30:00 (local, no zone) − UTC 2026-10-02 09:30:00 UTC = UTC+1
No extra fields in either header.
The name, byte by byte
50 72 6F 6A 65 63 74 2F
Read as code page 437 (no UTF-8 flag)Project/
Clean, reproducible copyCopies every file’s compressed bytes unchanged and writes fresh headers from the central directory, so the local and central copies agree by construction. No data descriptors, offsets measured from the real start of the file, forward slashes, and UTF-8 flagged where it is used. The options below remove what makes two zips of the same files come out byte-different. The copy is then parsed again, and every CRC is recomputed from the decompressed data.
Entries written5 · 4 clutter dropped
Size1.8 KB → 780 B
Headers agreeall 5
Problems left1
CRC re-check4 ok
Time zone leftnone
SHA-256 beforeca4ea84213283c08…
SHA-256 after3d306477f089bc2f6e3665799656055c…
downloadDownload clean ZIP
~/spec-sheet

ZIP, for reference.

Identifiers, encodings and registered method codes from PKWARE’s APPNOTE, alongside the dates the format changed.

Full nameZIP file formatAlso called PKZIP format, after the program that introduced it
Extensions.zip · .zipx.zipx is WinZip’s label for archives using newer methods such as LZMA or PPMd
MIME typeapplication/zipWindows browsers often send application/x-zip-compressed
Apple UTIcom.pkware.zip-archiveUniform Type Identifier used by macOS and iOS
Magic bytes50 4B 03 04“PK” then bytes 03 04, at offset 0. An empty archive starts 50 4B 05 06; a spanned one 50 4B 07 08
Byte orderlittle-endianEvery multi-byte number, lowest byte first
SpecificationPKWARE APPNOTE.TXT 6.3.10Maintained by PKWARE since 1989; freely published
ISO standardISO/IEC 21320-1:2015Document Container File: a subset allowing only stored and Deflate, no encryption, used by ODF, OOXML and EPUB
ChecksumCRC-32Polynomial 0x04C11DB7 (reflected 0xEDB88320), over the uncompressed data
TimestampsMS-DOS date/timeLocal time, 2-second steps, 1980 to 2107. Unix (0x5455) and NTFS (0x000A) extra fields add precision
File namesCP437 or UTF-8IBM code page 437 unless flag bit 11 marks UTF-8; paths always use forward slashes
Method codes0 · 8 · 9 · 12 · 14 · 93 · 95 · 98Stored, Deflate, Deflate64, BZIP2, LZMA, Zstandard, XZ, PPMd
EncryptionZipCrypto · AES (method 99)Traditional PKWARE encryption, WinZip AE-1/AE-2, and PKWARE’s own Strong Encryption
Size limits4 GiB · 65,535 entriesClassic fields. ZIP64 raises both to 2⁶⁴
1989PKZIP and APPNOTEPhil Katz’s PKWARE releases PKZIP and publishes the file format description alongside it.
1993Deflate becomes the defaultPKZIP 2 introduces Deflate, the method nearly every ZIP still uses.
1996Deflate gets an RFCRFC 1951 documents Deflate independently, so any program can implement it.
2001ZIP64APPNOTE 4.5 adds 64-bit sizes, offsets and counts, removing the 4 GiB and 65,535-file limits.
2003AES encryptionWinZip 9 adds AES, recorded as method 99 with the real method in an extra field.
2006UTF-8 file namesAPPNOTE 6.3.0 defines flag bit 11 so names outside code page 437 survive between systems.
2015ISO subsetISO/IEC 21320-1 standardises the plain ZIP that document formats build on.
2020Zstandard registeredMethod 93 is assigned to Zstandard, a faster modern compressor.