**7z** là một định dạng nén dữ liệu có hỗ trợ một số thuật toán nén dữ liệu, mã hóa và tiền xử lý khác nhau. Định dạng 7z xuất hiện đầu tiên từ phần mềm nén dữ liệu 7-Zip. 7-Zip là một phần mềm tự do nguồn mở phát hành théo giấy phép GNU. LZMA SDK 4.62 được đưa vào Phạm vi công cộng tháng 12 năm 2008. Phiên bản ổn định mới nhất của 7-Zip và LZMA SDK là phiên bản 18.05.

Đặc tả định dạng file 7z được phân phối với mã nguồn của 7-Zip. Thông số kỹ thuật có thể được tìm thấy ở định dạng văn bản thuần túy trong thư mục con 'doc' của phân phối mã nguồn. Kiểu MIME của 7z là `application/x-7z-compressed`.

Các tính năng và cải tiến
-------------------------

Định dạng 7z cung cấp các tính năng chính:

* Kiến trúc mở, mô-đun cho phép mọi phương thức nén, chuyển đổi hoặc mã hóa được xếp chồng lên nhau.
* Tỷ lệ nén cao (phụ thuộc vào phương pháp nén được sử dụng)
* Mã hóa AES-256.
* Hỗ trợ tệp lớn (tối đa khoảng 16 exbibytes, hoặc 264 bytes).
* Tên file Unicode
* Hỗ trợ nén rắn, trong đó nhiều file cùng loại được nén trong một luồng, để khai thác tính dự phòng kết hợp vốn có trong các file tương tự.
* Nén và mã hóa các tiêu đề lưu trữ.
* Hỗ trợ cho tài liệu lưu trữ nhiều phần: ví dụ: xxx.7z.001, xxx.7z.002,...
* Hỗ trợ các codec plugin DLL tùy chỉnh.

Kiến trúc mở của định dạng cho phép các phương thức nén bổ sung trong tương lai được thêm vào tiêu chuẩn.

### Phương thức nén

Các phương pháp nén sau hiện đang được sử dụng:

* LZMA – Một biến thể của thuật toán LZ77, sử dụng từ điển trượt có chiều dài lên đến 4 GB để loại bỏ chuỗi trùng lặp. Giai đoạn LZ được theo sau bởi mã hóa entropy bằng cách sử dụng bộ mã hóa và cây nhị phân phạm vi dựa trên Markov chain.
* LZMA2 – Phiên bản chỉnh sửa của LZMA cung cấp hỗ trợ đa luồng tốt hơn và ít mở rộng dữ liệu không thể nén hơn.
* Bzip2 – Thuật toán biến đổi Burrows–Wheeler. Bzip2 sử dụng hai phép biến đổi thuận nghịch; BWT, sau đó di chuyển lên phía trước với mã hóa Huffman để giảm ký hiệu (yếu tố nén thực tế).
* PPMd – PPMdH (PPMII/cPPMII) 2002 của Dmitry Shkarin với những thay đổi nhỏ: PPMII là phiên bản cải tiến của thuật toán nén PPM 1984 (dự đoán bằng cách khớp một phần).
* DEFLATE – Thuật toán tiêu chuẩn dựa trên mã hóa 32 kB LZ77 và mã hóa Huffman. Deflateđược tìm thấy trong một số định dạng file bao gồm ZIP, gzip, PNG và PDF. 7-Zip chứa bộ mã hóa DEFLATE từ đầu, thường xuyên đánh bại phiên bản zlib tiêu chuẩn thực tế ở kích thước nén, nhưng phải trả giá bằng việc sử dụng CPU

Một bộ công cụ nén lại được gọi là AdvanceCOMP chứa một bản sao của bộ mã hóa DEFLATE từ triển khai 7-Zip; những tiện ích này thường có thể được sử dụng để nén thêm kích thước của các file gzip, ZIP, PNG hoặc MNG hiện có.

### Bộ lọc tiền xử lý

The LZMA SDK đi kèm với bộ tiền xử lý BCJ và BCJ2, để các giai đoạn sau có thể đạt được độ nén lớn hơn: với các vi xử lý x86, ARM, PowerPC (PPC), IA-64 Itanium, và ARM Thumb, mục tiêu nhảy được 'bình thường hóa'  trước khi nén bằng cách thay đổi vị trí tương đối thành giá trị tuyệt đối. Đối với x86, điều này có nghĩa là các bước nhảy gần, các lời gọi và các bước nhảy có điều kiện (nhưng không phải là các bước nhảy ngắn và các bước nhảy có điều kiện) được chuyển đổi từ ngôn ngữ máy kiểu "nhảy 1655 bytes ngược" sang kiểu "nhảy đến địa chỉ 5554"; tất cả các bước nhảy đến 5554, có lẽ là một chương trình con phổ biến, do đó được mã hóa giống hệt nhau, làm cho chúng có thể nén hơn.

* BCJ – Bộ chuyển đổi cho các file thực thi 32-bit x86. Bình thường hóa địa chỉ mục tiêu của các lần nhảy gần và các cuộc gọi từ khoảng cách tương đối đến đích tuyệt đối.
* BCJ2 – Bộ xử lý trước cho các file thực thi 32-bit x86. BCJ2 là một cải tiến trên BCJ, thêm xử lý lệnh nhảy/gọi x86 bổ sung. Gần nhảy, gần lời gọi, các mục tiêu gần nhảy có điều kiện được tách ra và nén riêng trong luồng khác.
* Mã hóa Delta – bộ lọc delta, bộ tiền xử lý cơ bản cho dữ liệu đa phương tiện.

Công nghệ tiền xử lý thực thi tương tự được bao gồm trong phần mềm khác; trình nén RAR có tính năng nén dịch chuyển cho các file thực thi x86 32 bit và các tệp thực thi IA-64 và trình nén file thực thi thời gian chạy UPX bao gồm hỗ trợ làm việc với các giá trị 16 bit trong các file nhị phân DOS.

### Mã hóa

Định dạng 7z hỗ trợ mã hóa bằng thuật toán AES với khóa 256-bit. Khóa được tạo từ cụm mật khẩu do người dùng cung cấp bằng thuật toán dựa trên hàm băm SHA-256. SHA-256được thực thi 218 (262144) lần, điều này gây ra sự chậm trễ đáng kể trên các PC yếu trước khi bắt đầu nén hoặc trích xuất. Kỹ thuật này được gọi là kéo dài khóa và được sử dụng để làm cho việc tìm kiếm cụm từ mật khẩu trở nên khó khăn hơn. Các cuộc tấn công phần cứng tùy chỉnh và dựa trên GPU hiện tại đã hạn chế tính hiệu quả của phương pháp kéo dài khóa cụ thể này, do đó, điều quan trọng là phải chọn mật khẩu mạnh. Định dạng 7z cung cấp tùy chọn mã hóa tên file của kho lưu trữ 7z.

### Giới hạn

Định dạng 7z không lưu trữ quyền của hệ thống file (như quyền của chủ sở hữu/nhóm UNIX hay NTFS ACLs), và do đó có thể không phù hợp cho mục đích sao lưu/lưu trữ. Một cách giải quyết trên các hệ thống tương tự UNIX cho việc này là chuyển đổi dữ liệu thành file tar trước khi nén 7z. Nhưng điều đáng chú ý là GNU tar (phổ biến trong nhiều môi trường UNIX) cũng có thể nén bằng thuật toán LZMA, mà không cần sử dụng 7z và trong trường hợp này, phần mở rộng file được đề xuất cho kho lưu trữ là ".tar.lzma" (hay chỉ là ".tlz"), chứ không phải ".tar.7z". Mặt khác, điều quan trọng cần lưu ý là tar không lưu mã hóa hệ thống file, điều đó có nghĩa là tên file được nén tar có thể không đọc được nếu được giải nén trên một máy tính khác. Cũng có thể sử dụng LZMA2 bằng cách chạy nó thông qua công cụ xz. Các phiên bản gần đây của GNU tar hỗ trợ chuyển đổi `-J`, chạy TAR thông qua XZ. Phần mở rộng file là ".tar.xz" hoặc ".txz". Phương pháp nén này đã được áp dụng với nhiều bản phân phối cho đóng gói, như Arch, Debian (deb), Fedora (rpm) và Slackware.

Định dạng 7z không cho phép trích xuất một số "file bị hỏng"—(ví dụ) nếu một file có phân đoạn đầu tiên của một loạt các file 7z, 7z không thể bắt đầu các file trong kho lưu trữ, nó phải đợi cho đến khi tất cả phân khúc được tải xuống. Định dạng 7z cũng thiếu các bản ghi phục hồi, khiến nó dễ bị suy hao dữ liệu. Bằng cách so sánh, các file zip cũng thiếu tính năng khôi phục. Ngược lại, định dạng rar độc quyền cho phép phục hồi cũng như trích xuất các file bị hỏng và kéo dài file.

Xem thêm
--------

* 7-Zip
* Rar
* Zip
* LZMA

Chú thích
---------

1. 1 2  "A Few Questions for Igor Pavlov". Dr. Dobb's Data Compression Newsletter. ngày 30 tháng 4 năm 2003. Truy cập ngày 26 tháng 12 năm 2009.
2. ↑  History of 7-zip changes
3. ↑  Collin, Lasse. "lzma.h". *LZMA source code header file*. lines 36–38. Lưu trữ bản gốc ngày 8 tháng 2 năm 2010. Truy cập ngày 3 tháng 1 năm 2010. Compared to LZMA1, LZMA2 adds support for LZMA\_SYNC\_FLUSH, uncompressed chunks (smaller expansion when trying to compress uncompressible data), possibility to change lc/lp/pb in the middle of encoding, and some other internal improvements.Quản lý CS1: địa điểm (liên kết)
4. ↑  Collin, Lasse. "lzma.h". *LZMA source code header file*. lines 36–38. Lưu trữ bản gốc ngày 8 tháng 2 năm 2010. Truy cập ngày 3 tháng 1 năm 2010. Compared to LZMA1, LZMA2 adds support for LZMA\_SYNC\_FLUSH, uncompressed chunks (smaller expansion when trying to compress uncompressible data), possibility to change lc/lp/pb in the middle of encoding, and some other internal improvements.Quản lý CS1: địa điểm (liên kết)
5. ↑  "Mã nguồn 7Zip". *sourceforge.net*. Truy cập 15 tháng 1 năm 2019.
6. ↑  Colin Percival. scrypt. As presented in "Stronger Key Derivation via Sequential Memory-Hard Functions". presented at BSDCan'09, May 2009.
7. ↑  "GNU tar 1.30: 8.1 Using Less Space through Compression". *gnu.org*. Bản gốc lưu trữ ngày 24 tháng 9 năm 2018. Truy cập 15 tháng 1 năm 2019.

Đọc thêm
--------

* Salomon, David (2007). *Data compression: the complete reference*. Springer. tr. 241. ISBN 1-84628-602-6.

Lên kết ngoài
-------------

* 7z Format.

Bản mẫu:Archive formats