# 7z

7z è un formato di file di archivi compressi che supporta differenti dati di compressione, filtri di cifratura e di pre-elaborazione.
Il formato 7z apparve inizialmente implementato nel programma di archiviazione 7-Zip, ed esso è disponibile gratuitamente al pubblico sotto i termini della GNU Lesser General Public License.
L'LZMA SDK 4.62 è stata resa di dominio pubblico nel dicembre 2008; l'ultima versione disponibile del 7-Zip e dell'LZMA SDK è la 19.00 (21 febbraio 2019).
Il tipo MIME è application/x-7z-compressed.
La specifica ufficiale del formato 7z è distribuita con il codice sorgente 7-zip, e possono essere trovate nella sottocartella doc/ del codice sorgente.

## Caratteristiche

Il formato 7z fornisce le seguenti caratteristiche principali:
* Apertura: un'architettura modulare permette a qualsiasi compressore, convertitore, o metodo crittografico di essere impilato.
* Alto rapporto di compressione (dipende dal metodo di compressione usato).
* Solida crittografia Rijndael/AES-256.
* Supporta file di grandi dimensioni (fino a circa 16 exabyte).
* Solido supporto per compressioni nelle quali file multipli dello stesso tipo siano compressi in un flusso singolo, in modo da sfruttare la ripetizione di file simili.
* Compressione e cifratura delle strutture dell'archivio.
L'architettura aperta di questo formato permette di sviluppare altri metodi di compressione che in futuro potranno essere aggiunti allo standard.

## Supporti
### Filtri di compressione

* LZMA: una variante dell'algoritmo LZ77, modificato per ottenere una migliore compressione, una maggior velocità di decompressione e un minor utilizzo di memoria. Prende il nome dalle iniziali degli autori (Algoritmo Lempel-Ziv-Markov) e utilizza un dizionario scorrevole di lunghezza non fissa (fino a 4Gb) per l'eliminazione di stringhe duplicate. La fase LZ è seguita dalla codifica dell'entropia usando la catena di Markov basata sul "range coder" e sugli alberi lineari.
* LZMA2: versione modificata dell'LZMA, fornisce i seguenti vantaggi:
** migliore supporto di multithreading
** migliore compressione dei dati già compressi
* Bzip2: l'algoritmo standard della Trasformata di Burrows-Wheeler. Bzip2 utilizza due trasformazioni reversibili BWT, poi utilizza la trasformata "move to front" con la codifica Huffman per la riduzione dei simboli.
* PPMd: il PPMdH (PPMII/cPPMII) di Dmitry Shkarin del 2002 con piccoli cambiamenti. Il PPMII è una versione migliorata dell'algoritmo di compressione PPM del 1984.
* DEFLATE: algoritmo standard basato sull'LZ77 da 32kb (LZSS attualmente) e sulla codifica di Huffman. Il DEFLATE si trova in molti formati di file inclusi ZIP, gzip, PNG e PDF.
Una gamma di strumenti di compressione chiamata AdvanceCOMP contiene una copia del codificatore DEFLATE dall'implementazione del 7-Zip, queste utilities sono spesso utilizzate per effettuare compressioni successive dei file gzip, ZIP, PNG o MNG già esistenti.

### Filtri di pre-elaborazione

L'LZMA SDK è fornito con pre-elaboratori BCJ, BCJ2, di modo che con le fasi successive alla preelaborazione si ottenga una compressione maggiore. Per l'x86, ARM, PowerPC (PPC) IABY e thumbARM, gli obiettivi di salto sono normalizzati prima della compressione cambiando la relativa posizione in valori assoluti. Per l'x86 questo significa che i salti successivi, chiamate, salti condizionali (ma non salti piccoli) sono convertiti dallo stile del linguaggio macchina “jump 1655 bytes backwards” alla notazione “jump to address 5554”.
* BCJ, Convertitore per eseguibili a 32bit (x86). Normalizza gli indirizzi bersaglio dei salti vicini e chiamate dalle relative distanze alle destinazioni assolute.
* BCJ2, Preprocessore per eseguibili a 32bit (x86). Il BCL2 è uno sviluppo del BCJ, aggiungendo istruzioni di salti/chiamata addizionali all'x86. Salto vicino, chiamata vicina, condizionale vicina agli obiettivi di salto sono divisi e compressi separatamente in un altro flusso.
* Codifica Delta, filtro Delta, preprocessore di base per dati multimediali.

### Cifratura

Il formato 7z supporta la cifratura con l'algoritmo AES con una chiave a 256-bit. La chiave è generata da una password fornita dall'utente usando un algoritmo basato sull'algoritmo di Hash (SHA-256). L'SHA-256 è eseguito 2$^{18}$ (262144) volte: ciò causa un ritardo significativo, nei PC lenti, prima che parta la compressione o l'estrazione. Questa tecnica è chiamata Key Strengthening ed è usata per rendere più difficoltoso (e lungo in termini di tempo) un eventuale attacco brute-force nei confronti del file cifrato. Il formato 7z fornisce inoltre la possibilità di criptare i nomi dei file dentro un archivio.

## Limitazioni

Il formato 7z non immagazzina permessi UNIX, e questo può essere inappropriato per archivi di backup. Uno stratagemma è quello di convertire i dati in un flusso di bit in formato tar prima della compressione con 7z.
Il formato 7z non permette l'estrazione di alcuni file corrotti: ad esempio se si ha il primo segmento di una serie di file 7z, 7z non può dare l'inizio dei file all'interno dell'archivio, deve attendere che tutte le parti siano scaricate. Il formato 7z inoltre manca di registrazione di ripristino che può essere un problema quando c'è corruzione di file limitata.