Recommandations sur une bibliothèque libre à utiliser pour la compression de fichiers [fermé]

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

  •  03-07-2019
  •  | 
  •  

Question

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

Ceci doit être ouvert par un tiers, la protection par mot de passe doit donc fonctionner avec des outils standard.

Était-ce utile?

La solution

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

Un ensemble de code source disponible gratuitement, 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 )

UPDATE: Ce code est désormais sous licence Apache et publié sur http://code.google.com/. p / winzipaes / . Cela a fonctionné pour moi (un fichier dans le zip), et comble bien un trou dans les bibliothèques sources ouvertes 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 portée: http://www.nsoftware.com/ipworks/zip/default.aspx

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

Autres conseils

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

Caractéristiques principales:

  • Créer, Ajouter, Extraire, Mettre à jour, Supprimer des fichiers d'un fichier Zip
  • Fichiers Zip protégés en lecture / écriture 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)
  • Prend en charge les noms de fichier Unicode
  • Moniteur de progression

Licence:

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

Une chose très importante concernant le cryptage zip:

Il existe plusieurs types de cryptage zip. L’ancien type (qui fait partie de la norme zip initiale) ne vaut absolument pas la peine de s’ennuyer (il peut être craqué en moins de 10 minutes avec des applications facilement disponibles en ligne).

Si vous procédez au cryptage de fichiers zip, assurez-vous d’utiliser l’une des normes de cryptage strictes (je crois que la norme AES 128 bits et 256 bits de WinZip est la meilleure prise en charge). Voici les spécifications techniques . Nous les avons utilisées lors du développement de notre propre système zip crypté Java (impossible). fournissez la source - désolé - c'est pour usage interne seulement)

La seule chose pire que de ne pas avoir de chiffrement, c'est de penser que vous avez un chiffrement et de vous tromper: -)

7-Zip a la possibilité d’ajouter un mot de passe en mode ligne de commande. Peut-être que vous pouvez l'exécuter pour obtenir ce résultat (et il a aussi un bon ratio de compression).

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

Notez que l'utilitaire Zip d'InfoZip, également très portable, supporte également 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 utilisant winzipaes 1.0.1. Notez que ceci n’est qu’un résumé, je n’ai pas testé ce code 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 (c'est-à-dire 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 à 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 pouvant gérer un mot de passe zip?
  2. La même question que précédemment allez-vous transmettre ce zip à une entité externe devant ouvrir le zip?
  3. Est-ce interne uniquement et vous souhaitez simplement protéger le contenu du zip?

Pour 3, vous pouvez simplement utiliser Java pour chiffrer le contenu du flux du zip en tant que fichier normal, il est probablement préférable de changer l'extension de fichier en .ezip ou à un autre.

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

Information supplémentaire: J'ai cherché un peu plus sur Google et, en fait, c'est une question assez courante, et il semble qu'il n'y ait pas encore de solution gratuite (

Maintenant, l'algorithme standard de cryptage Zip est bien défini: voir Note d'application sur le format de fichier .ZIP. Cela semble être un cryptage effectué sur le flux 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? Brevet / problème juridique? Trop faible pour être utilisable?

  

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

java.util.zip fera la compression, mais pas les mots de passe. Et non, je ne connais pas de libres qui le feront. Le moins cher que j'ai vu coûte 150 € pour un poste de développeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top