Recommandations sur une bibliothèque gratuite à utiliser pour compresser les fichiers

Je dois protéger un fichier par zip et mot de passe. Y a-t-il une bonne bibliothèque (gratuite) pour cela?

Cela doit être ouvert par un tiers, de sorte que la protection par mot de passe doit fonctionner avec des outils standard.

Après de nombreuses recherches, j’ai trouvé trois approches:

Un ensemble de code source librement disponible, adapté à un fichier zip unique. Cependant, il n’y a pas de licence. L’utilisation est AesZipOutputStream.zipAndEcrypt (…). http://merkert.de/de/info/zipaes/src.zip ( https://forums.oracle.com/forums/thread.jspa?threadID=1526137 )

MISE À JOUR: Ce code est maintenant sous licence Apache et publié à l’ adresse http://code.google.com/p/winzipaes/ . Cela a fonctionné pour moi (un fichier dans le zip), et remplit bien un trou dans les bibliothèques sources des ouvertures de Java.

Un produit commercial (500 $ au moment de la rédaction). Je ne peux pas vérifier si cela fonctionne, car leur approche de licence d’essai est complexe. C’est aussi une application .NET scope: http://www.nsoftware.com/ipworks/zip/default.aspx

Un produit commercial (290 $ au moment de la rédaction). Convient uniquement aux Wnidows car il utilise une DLL: http://www.example-code.com/java/zip.asp

Vous pouvez essayer Zip4j , une bibliothèque java pure pour gérer le fichier zip. Il prend en charge le cryptage / décryptage des méthodes de cryptage PKWare et AES.

Principales caractéristiques:

  • Créer, append, extraire, mettre à jour, supprimer des fichiers d’un fichier Zip
  • Lecture / écriture de fichiers Zip protégés par mot de passe
  • Prend en charge le cryptage AES 128/256
  • Prend en charge le cryptage Zip standard
  • Prend en charge le format Zip64
  • Prend en charge la méthode de compression Store (No Compression) et Deflate
  • Créer ou extraire des fichiers à partir de fichiers Split Zip (Ex: z01, z02, … zip)
  • Prise en charge des noms de fichiers Unicode
  • Moniteur de progression

Licence:

  • Zip4j est publié sous la licence Apache, version 2.0 .

Ce n’est pas une réponse, mais il faut garder à l’esprit lors de l’évaluation des solutions potentielles.

Une chose très importante à propos du chiffrement zip:

Il existe plusieurs types de chiffrement zip. L’ancien type (qui fait partie de la norme zip d’origine) ne vaut pas la peine d’être dérangé (il peut être craqué en moins de 10 minutes avec les applications facilement accessibles en ligne).

Si vous effectuez un chiffrement quelconque de fichiers zip, veuillez vous assurer que vous utilisez l’un des standards de chiffrement les plus ssortingcts (je pense que le standard AES 128 et 256 bits de WinZip est le mieux pris en charge). Voici les spécifications techniques – nous l’avons utilisé lors du développement de notre propre système zip chiffré en Java (ne peut pas fournir de source – désolé – c’est uniquement un usage interne)

La seule chose pire que de ne pas avoir de cryptage est de penser que vous avez le cryptage et que vous avez tort 🙂

7-Zip a l’option d’append un mot de passe en mode ligne de commande. Vous pouvez peut-être l’exécuter pour obtenir ce résultat (et il a aussi un bon rapport de compression).

Inconvénients: processus externe, difficile à rendre portable (même si 7-Zip est portable), pas sûr de la licence de dissortingbution.

Notez que l’utilitaire Zip d’InfoZip, également très portable, prend également en charge le mot de passe.

Vous pouvez également essayer TrueZip. Voir les liens suivants pour les fonctionnalités: https://christian-schlichtherle.bitbucket.io/truezip/

Le successeur de TrueZip peut être trouvé ici: https://christian-schlichtherle.bitbucket.io/truevfs/

Voici un exemple d’utilisation de winzipaes 1.0.1. Notez que ceci est juste une idée, je n’ai pas testé ce code exactement sous cette forme.

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(); 

Vous pouvez les décompresser “/tmp/foo.zip” en utilisant Winzip (v9 +) ou 7za (7zip) sur un Mac, en utilisant le mot de passe “my-password”.

Remarque: je ne comprends pas pourquoi il est nécessaire de spécifier le mot de passe deux fois dans le code ci-dessus. Je ne sais pas ce qui se passerait si vous utilisiez des mots de passe différents dans ces deux endroits.

Si vous donnez un meilleur scénario d’utilisation, il existe d’autres alternatives.

  1. Avez-vous besoin que le zip soit ouvert par les outils Zip standard capables de gérer un mot de passe zip?
  2. La même question que précédemment allez-vous transmettre ce zip à une entité externe qui doit ouvrir le zip?
  3. Est-ce uniquement interne et vous voulez juste protéger le contenu du zip?

Pour 3, vous pouvez simplement utiliser java pour chiffrer le contenu du fichier zip en tant que fichier normal, il est probablement préférable de changer l’extension de fichier en fichier .ezip ou somesuch.

Pour 1 et 2, vous pouvez utiliser la solution chillkat comme mentionné ou un équivalent. Toutefois, sachez que chillkat n’est pas une solution Java pure, il utilise JNI.

Informations complémentaires: J’ai googlé un peu plus et c’est une question assez courante, et il semble qu’il n’y ait pas de solution gratuite (encore?).

L’algorithme standard du chiffrement Zip est maintenant bien défini: voir la note d’application de PKWARE sur le format de fichier .ZIP. Il semble que ce soit un cryptage effectué sur le stream crypté. Si quelqu’un a envie de le coder …

Maintenant, je me demande pourquoi Sun ne l’a pas inclus dans sa bibliothèque? Manque de standard? Problème de brevet / juridique? Trop faible pour être utilisable?

Y a-t-il une bonne bibliothèque (gratuite) pour cela?

java.util.zip fera le zipping, mais il ne fera pas les mots de passe. Et non, je ne connais aucun programme gratuit qui le fera. Le moins cher que j’ai vu est de 150 $ pour un siège de développeur.