75 votes

Écrire un fichier Zip protégé par un mot de passe en Java

J'ai besoin de compresser un fichier et de le protéger par un mot de passe. Existe-t-il une bonne bibliothèque (gratuite) pour cela ?

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

9 votes

Comment une question aussi utile a-t-elle été classée ?

2 votes

Parce que Meta a décidé que les questions utiles qui pourraient se transformer en sujets d'opinion ne sont pas faites pour StackOverflow. C'est triste, mais vrai.

0 votes

Zip4j supporte le cryptage de la liste des fichiers : stackoverflow.com/questions/15085249/

54voto

Matt Points 321

Vous pouvez essayer Zip4j une bibliothèque java pure pour gérer les fichiers zip. Elle 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
  • Lecture/écriture de fichiers Zip protégés par un mot de passe
  • Prise en charge du cryptage AES 128/256
  • Prend en charge le cryptage Zip standard
  • Prend en charge le format Zip64
  • Supporte 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)
  • Supporte les noms de fichiers Unicode
  • Suivi des progrès

Licence :

1 votes

Et il fonctionne parfaitement avec Android également :) Grande bibliothèque avec d'excellents exemples +1 !

5 votes

Il semble que Zip4j soit abandonné :-/

0 votes

Fonctionne toujours.

35voto

JodaStephen Points 6357

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 suivante http://code.google.com/p/winzipaes/ . Il a fonctionné pour moi (un seul fichier dans le zip), et comble un vide dans les bibliothèques open source 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 la 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 pour Wnidows car il utilise une dll : http://www.example-code.com/java/zip.asp

0 votes

Est-ce que quelqu'un a un lien pour savoir comment utiliser le code winzipaes qui est posté dans ce lien ? J'ai besoin d'ajouter plus d'un fichier et j'aurais besoin d'aide pour comprendre comment l'utiliser.

0 votes

@frak Regardez le code source de AesFileEncrypter : tout ce que vous avez à faire est de créer une instance de cette classe et d'y ajouter ce que vous voulez.

1 votes

Winzipaes est disponible via le repo Maven mvnrepository.com/artifact/de.idyl/winzipaes

12voto

Kevin Day Points 9446

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

Une chose très importante à propos du cryptage des zip :

Il existe plusieurs types de cryptage de zip. L'ancien type (qui fait partie du standard zip original) ne vaut pas la peine d'être utilisé (il peut être craqué en moins de 10 minutes avec des applications facilement disponibles en ligne).

Si vous cryptez des fichiers zip, veillez à utiliser l'une des normes de cryptage les plus strictes (je pense que la norme AES 128 et 256 bits de WinZip est la mieux supportée). Voici les Caractéristiques techniques - nous avons utilisé ceci lors du développement de notre propre système de zip crypté en Java (nous ne pouvons pas fournir la source - désolé - c'est à usage interne seulement)

La seule chose pire que de ne pas avoir de cryptage est de penser que vous avez un cryptage et de se tromper :-)

2 votes

Vous pouvez vouloir prendre en charge les deux. Les fichiers zip cryptés AES ne sont, aFAIK, pas encore supportés par l'Explorateur Windows, alors que les fichiers zip cryptés PKZIP le sont. Vous pouvez visualiser les entrées de l'un ou l'autre type de fichier zip crypté, mais vous ne pouvez extraire des données que d'un fichier zip crypté PKZIP (faiblement crypté) en utilisant l'Explorateur Windows. Vous aurez besoin de WinZip ou d'un autre outil approprié sous Windows pour ouvrir les fichiers zip cryptés AES. (Le logiciel gratuit DotNetZip est livré avec un tel outil).

0 votes

Windows XP SP3 et Vista supportent tous deux les fichiers zip AES. Mon opinion (que chacun est libre de ne pas partager) est que supporter quelque chose qui n'est pas du tout sécurisé est une mauvaise idée. Le fait que M$ ne prenne pas en charge un format sécurisé n'est pas une raison valable pour mettre en œuvre quelque chose qui ne l'est pas.

0 votes

Les fichiers .zip créés par Winzipaes (voir ci-dessus) ne s'ouvrent pas sur mon image Windows XP à jour, Windows se plaint d'un schéma de compression non pris en charge. En revanche, ils s'ouvrent bien avec 7z.

4voto

PhiLho Points 23458

7-Zip a la possibilité d'ajouter un mot de passe dans son mode ligne de commande. Vous pouvez peut-être l'exécuter pour obtenir ce résultat (et il a aussi un bon taux 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, prend également en charge les mots de passe.

0 votes

7-zip possède des bibliothèques à utiliser dans les programmes auto-écrits, je crois, donc il n'est pas nécessaire que ce soit un processus externe.

0 votes

@Quagmire 7-zip n'a pas de compilation Java native (sauf pour l'algorithme LZMA), donc l'utilisation de 7z pour travailler avec des fichiers ZIP nécessitera un processus externe.

0 votes

@ChristopherSchultz en effet. Je suppose que l'on peut aussi écrire un wrapper JNI ou JNA, pour moins de difficultés.

3voto

Kai Points 356

Vous pouvez également essayer TrueZip. Voir les liens suivants pour les caractéristiques : http://truezip.java.net

1 votes

Je regrette de ne pas l'avoir vu plus tôt, Zip4j est bien mais celui-ci est meilleur. En particulier, il gère un plus large éventail d'entrées, comme les fichiers zip auto-extractibles et imbriqués, et bien d'autres choses encore, et n'est pas abandonné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X