Articulo de referencia

7z

{{cite web |url=http://www.ddj.com/architect/184405338 |title=A Few Questions for Igor Pavlov |date=2003-04-30 |publisher=[[Dr. Dobb's]] Data Compression Newsletter |access-date...

7z es un formato de archivo comprimido que admite varios algoritmos diferentes de compresión , cifrado y preprocesamiento de datos. El formato 7z apareció inicialmente implementado por el archivador 7-Zip . El programa 7-Zip está disponible públicamente bajo los términos de la Licencia Pública General Reducida de GNU . El SDK LZMA 4.62 se puso en el dominio público en diciembre de 2008. La última versión estable de 7-Zip y del SDK LZMA es la versión 26.00. [ 2 ]

La especificación del formato de archivo 7z se distribuye con el código fuente de 7-Zip desde 2015. La especificación se puede encontrar en formato de texto plano en el subdirectorio "doc" de la distribución del código fuente. [ 3 ] [ 4 ]

Características y mejoras

El formato 7z ofrece las siguientes características principales:

  • Arquitectura abierta y modular que permite combinar cualquier método de compresión, conversión o cifrado.
  • Altas relaciones de compresión (dependiendo del método de compresión utilizado).
  • Cifrado AES de 256 bits .
  • Cifrado Zip 2.0 (heredado)
  • Admite archivos grandes (hasta aproximadamente 16 exbibytes o 2⁶⁴ bytes).
  • Nombres de archivo Unicode .
  • Compatibilidad con la compresión sólida , donde varios archivos de tipo similar se comprimen dentro de un único flujo, con el fin de aprovechar la redundancia combinada inherente a los archivos similares.
  • Compresión y cifrado de las cabeceras de los archivos .
  • Compatibilidad con archivos multipartes: por ejemplo, xxx.7z.001, xxx.7z.002, ... (consulte las opciones del menú contextual Dividir archivo... para crearlos y Combinar archivos... para volver a ensamblar un archivo a partir de un conjunto de archivos componentes multipartes).
  • Compatibilidad con DLL de complementos de códec personalizados.

La arquitectura abierta del formato permite que en el futuro se añadan métodos de compresión adicionales al estándar.

Métodos de compresión

Actualmente se definen los siguientes métodos de compresión:

  • LZMA  : una variación del algoritmo LZ77 que utiliza un diccionario deslizante de hasta 4  GB de longitud para la eliminación de cadenas duplicadas. La etapa LZ va seguida de una codificación de entropía mediante un codificador de rango basado en cadenas de Markov y árboles binarios .
  • LZMA2  : versión modificada de LZMA que proporciona mejor soporte para multihilo y menor expansión de datos incompresibles. [ 4 ]
  • Bzip2  : el algoritmo estándar de transformación de Burrows-Wheeler . Bzip2 utiliza dos transformaciones reversibles: BWT y, a continuación , codificación Huffman para la reducción de símbolos (el elemento de compresión propiamente dicho).
  • PPMd  – PPMdH de Dmitry Shkarin de 2002 (PPMII (Predicción por coincidencia parcial con herencia de información) y cPPMII (PPMII complicado)) con pequeños cambios: PPMII es una versión mejorada del algoritmo de compresión PPM de 1984 (predicción por coincidencia parcial).
  • DEFLATE  : algoritmo estándar basado en LZ77  de 32 kB y codificación Huffman . Deflate se encuentra en varios formatos de archivo, incluidos ZIP , gzip , PNG y PDF . 7-Zip incluye un codificador DEFLATE propio que suele superar a la versión estándar de facto zlib en tamaño de compresión, pero a costa de un mayor uso de la CPU.

Un conjunto de herramientas de recompresión llamado AdvanceCOMP contiene una copia del codificador DEFLATE de la implementación de 7-Zip; estas utilidades a menudo se pueden usar para comprimir aún más el tamaño de archivos gzip , ZIP , PNG o MNG existentes .

Filtros de preprocesamiento

El SDK de LZMA incluye los preprocesadores BCJ y BCJ2 , lo que permite que las etapas posteriores logren una mayor compresión: para los procesadores x86 , ARM , PowerPC (PPC), IA-64 Itanium y ARM Thumb , los destinos de salto se "normalizan" [ 4 ] antes de la compresión, cambiando la posición relativa a valores absolutos. Para x86, esto significa que los saltos cercanos, las llamadas y los saltos condicionales (pero no los saltos cortos ni los saltos condicionales) se convierten de la notación de estilo "salto de 1655 bytes hacia atrás" del lenguaje máquina a la notación de estilo "salto a la dirección 5554" normalizada; todos los saltos a 5554, tal vez una subrutina común, se codifican de forma idéntica, lo que los hace más compresibles.

  • BCJ  : convertidor para ejecutables x86 de 32 bits. Normaliza las direcciones de destino de saltos y llamadas cercanas, convirtiendo distancias relativas en destinos absolutos.
  • BCJ2  : Preprocesador para ejecutables x86-64. BCJ2 es una mejora de BCJ, que añade procesamiento adicional de instrucciones de salto/llamada x86. Los destinos de salto cercano, llamada cercana y salto cercano condicional se separan y comprimen por separado en otro flujo.
  • Filtros tipo BCJ para ARM64, ARM32, ARM-Thumb, PowerPC y SPARC.
  • Codificación delta  : filtro delta, preprocesador básico para datos multimedia.
  • Swap2/Swap4  : filtro de intercambio de orden de bytes.

Cifrado

El formato 7z admite el cifrado con el algoritmo AES con una clave de 256 bits. La clave se genera a partir de una contraseña proporcionada por el usuario mediante un algoritmo basado en la función hash SHA-256 . El SHA-256 se ejecuta 2¹⁹ (524 288) veces, [ 5 ] lo que provoca un retraso significativo en ordenadores lentos antes de que comience la compresión o la extracción. Esta técnica se denomina estiramiento de clave y se utiliza para dificultar la búsqueda por fuerza bruta de la contraseña. Los ataques actuales basados ​​en GPU y los ataques de hardware personalizados limitan la eficacia de este método particular de estiramiento de clave, [ 6 ] por lo que sigue siendo importante elegir una contraseña segura. El formato 7z ofrece la opción de cifrar los nombres de archivo de un archivo 7z.

Limitaciones

El formato 7z no almacena permisos del sistema de archivos (como permisos de propietario/grupo UNIX o ACL NTFS ), por lo que puede ser inapropiado para fines de copia de seguridad/archivo. Una solución alternativa en sistemas tipo UNIX para esto es convertir los datos a un flujo de bits tar antes de comprimirlos con 7z. Pero GNU tar (común en muchos entornos UNIX) también puede comprimir con el algoritmo LZMA2 (" xz ") de forma nativa, sin usar 7z, usando el modificador "-J". La extensión de archivo resultante es ".tar.xz" o ".txz" y no ".tar.7z". Este método de compresión ha sido adoptado por muchas distribuciones para empaquetado, como Arch, Debian (deb), Fedora (rpm) y Slackware. (El formato "lzma" más antiguo es menos eficiente). [ 7 ] Por otro lado, tar no guarda la codificación del sistema de archivos, lo que significa que los nombres de archivo comprimidos con tar pueden volverse ilegibles si se descomprimen en una computadora diferente.

El formato 7z no permite la extracción de algunos archivos dañados; es decir, (por ejemplo) si se tiene el primer segmento de una serie de archivos 7z, este formato no puede proporcionar el inicio de los archivos dentro del archivo comprimido, sino que debe esperar a que se descarguen todos los segmentos. El formato 7z tampoco cuenta con registros de recuperación, lo que lo hace vulnerable a la degradación de datos a menos que se utilice junto con soluciones externas, como archivos comprimidos , o dentro de sistemas de archivos con una sólida corrección de errores . En comparación, los archivos zip tampoco cuentan con una función de recuperación, mientras que el formato rar sí la tiene.

Véase también

Referencias

  1. "Algunas preguntas para Igor Pavlov" . Boletín de compresión de datos del Dr. Dobb . 30 de abril de 2003. Archivado del original el 28 de octubre de 2008. Consultado el 26 de diciembre de 2009 .
  2. 1 2 "Historial de cambios de 7-zip" . Archivado del original el 12 de febrero de 2026. Recuperado el 21 de marzo de 2026 .
  3. SDK de LZMA, directorio "DOC", 7zFormat.txt
  4. 1 2 3 Collin, Lasse. "lzma_.lzma" . Enlaces de liblzma . Archivado del original el 8 de febrero de 2010. Recuperado el 3 de enero de 2010. En comparación con LZMA1, LZMA2 agrega soporte para LZMA_SYNC_FLUSH, fragmentos sin comprimir (expansión más pequeña al intentar comprimir datos incompresibles), posibilidad de cambiar lc/lp/pb en medio de la codificación y algunas otras mejoras internas.
  5. "Código fuente de 7-zip" . Archivado del original el 22 de marzo de 2019. Consultado el 23 de marzo de 2018 .
  6. Colin Percival . scrypt Archivado el 28 de mayo de 2019 en Wayback Machine . Como se presentó en "Stronger Key Derivation via Sequential Memory-Hard Functions" Archivado el 14 de abril de 2019 en Wayback Machine . presentado en BSDCan'09, mayo de 2009.
  7. "GNU tar 1.34: 8.1 Uso de menos espacio mediante compresión" . Archivado del original el 2 de abril de 2015. Recuperado el 17 de marzo de 2015 .

Lecturas adicionales

  • Salomon, David (2007). Compresión de datos: la referencia completa . Springer. pág.  241. ISBN 978-1-84628-602-5.