Recomendaciones sobre una biblioteca gratuita para usar para comprimir archivos [cerrado]

StackOverflow https://stackoverflow.com/questions/166340

  •  03-07-2019
  •  | 
  •  

Pregunta

Necesito comprimir y proteger con contraseña un archivo. ¿Hay una buena biblioteca (gratuita) para esto?

Esto debe ser abierto por un tercero, por lo que la protección con contraseña debe funcionar con herramientas estándar.

¿Fue útil?

Solución

Después de mucho buscar, he encontrado tres enfoques:

Un conjunto de código fuente disponible de forma gratuita, adecuado para un solo archivo zip. Sin embargo, no hay licencia. El uso es AesZipOutputStream.zipAndEcrypt (...). http://merkert.de/de/info/zipaes/src.zip ( https://forums.oracle.com/forums/thread.jspa?threadID= 1526137 )

ACTUALIZACIÓN: este código ahora tiene licencia de Apache y se publica en http://code.google.com/ p / winzipaes / . Funcionó para mí (un archivo en el zip), y llena un hueco en las bibliotecas de código abierto de Java muy bien.

Un producto comercial ($ 500 en el momento de la escritura). No puedo verificar si esto funciona, ya que su enfoque de licencia de prueba es complejo. También es una aplicación .NET portada: http://www.nsoftware.com/ipworks/zip/default.aspx

Un producto comercial ($ 290 en el momento de la escritura). Adecuado sólo para Wnidows, ya que utiliza una DLL: http://www.example-code.com/java/zip.asp

Otros consejos

Puede probar Zip4j , una biblioteca pura de Java para manejar archivos zip. Admite el cifrado / descifrado de los métodos de cifrado de PKWare y AES.

Características clave:

  • Crear, agregar, extraer, actualizar, eliminar archivos de un archivo Zip
  • Lectura / escritura de archivos Zip protegidos con contraseña
  • Admite cifrado AES 128/256
  • Admite el cifrado Zip estándar
  • Compatible con el formato Zip64
  • Admite el método de compresión Store (No Compression) y Deflate
  • Cree o extraiga archivos de archivos Split Zip (Ej: z01, z02, ... zip)
  • Admite nombres de archivo Unicode
  • Monitor de progreso

Licencia:

Esta no es una respuesta, pero es una precaución a tener en cuenta al evaluar posibles soluciones.

Una cosa muy importante sobre el cifrado zip:

Hay varios tipos de cifrado zip. No vale la pena molestarse con el tipo antiguo (parte del estándar zip original) (se puede descifrar en menos de 10 minutos con aplicaciones fácilmente disponibles en línea).

Si está haciendo algún tipo de cifrado de archivos zip, asegúrese de utilizar uno de los estándares de cifrado más estrictos (creo que el estándar AES de 128 y 256 bits de WinZip es el mejor compatible). Estas son las especificaciones técnicas : las utilizamos al desarrollar nuestro propio sistema zip cifrado de Java (no se puede proporcionar fuente - lo siento - es solo para uso interno)

Lo único peor que no tener cifrado es pensar que tienes cifrado y estar equivocado :-)

7-Zip tiene la opción de agregar una contraseña en su modo de línea de comandos. Quizás pueda ejecutarlo para obtener este resultado (y también tiene una buena relación de compresión).

Inconvenientes: proceso externo, difícil de hacer portátil (incluso si 7-Zip es portátil), no está seguro de la licencia de distribución.

Tenga en cuenta que la utilidad Zip de InfoZip, también muy portátil, también admite contraseña.

También puedes probar TrueZip. Consulte los siguientes enlaces para ver las características: https://christian-schlichtherle.bitbucket.io/truezip/

El sucesor de TrueZip se puede encontrar aquí: https://christian-schlichtherle.bitbucket.io/truevfs/

Aquí hay un ejemplo usando winzipaes 1.0.1. Tenga en cuenta que esto es solo una idea general, no he probado este código exactamente de esta forma.

import de.idyl.winzipaes.AesZipFileEncrypter;
import de.idyl.winzipaes.impl.AESEncrypterBC;

File aNewZipFile = new File("/tmp/foo.zip");
File existingUnzippedFile = new File("/tmp/src.txt");

// We use the bouncy castle encrypter, as opposed to the JCA encrypter
AESEncrypterBC encrypter = new AESEncrypterBC();
encrypter.init("my-password", 0);  // The 0 is keySize, it is ignored for AESEncrypterBC

AesZipFileEncrypter zipEncrypter = new AesZipFileEncrypter(aNewZipFile, encrypter);
zipEncrypter.add(existingUnzippedFile, "src.txt", "my-password"); 

// remember to close the zipEncrypter
zipEncrypter.close();

Puede descomprimirlos " /tmp/foo.zip" usando Winzip (v9 +) o 7za (es decir, 7zip) en una Mac, usando la contraseña "my-password".

Nota: no me queda claro por qué es necesario especificar la contraseña dos veces en el código anterior. No sé qué pasaría si usaras contraseñas diferentes en estos dos lugares.

Si ofrece un mejor escenario de uso, existen otras alternativas.

  1. ¿Necesita que se abra el zip con las herramientas Zip estándar que pueden manejar una contraseña de zip?
  2. La misma pregunta que la anterior, ¿pasará este zip a una entidad externa que tiene que abrir el zip?
  3. ¿Es solo interno y solo desea proteger el contenido del archivo zip?

Para 3, entonces puede usar java para cifrar el contenido de la secuencia del archivo zip como un archivo normal, probablemente lo mejor es cambiar la extensión del archivo a .ezip o somesuch también.

Para 1 y 2, puede utilizar la solución chillkat como se mencionó, o un equivalente. Sin embargo, tenga en cuenta que chillkat no es una solución Java pura, utiliza JNI.

Información adicional: Busqué en Google un poco más y, de hecho, es una pregunta bastante común, y parece que no hay una solución gratuita (¿todavía?).

Ahora, el algoritmo estándar de encriptación Zip está bien definido: vea Nota de aplicación en el formato de archivo .ZIP. Parece ser un cifrado realizado en el flujo cifrado. Si alguien tiene ganas de codificarlo ...

Ahora, me pregunto por qué Sun no lo incluyó en su biblioteca. ¿Falta de estándar? Patente / problema legal? ¿Demasiado débil para ser utilizable?

  

¿Hay una buena biblioteca (gratuita) para esto?

java.util.zip hará la compresión, pero no hará las contraseñas. Y no, no conozco ningún libre que lo haga. El más barato que he visto es de $ 150 para un puesto de desarrollador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top