J'ai besoin de Zip et de protéger un fichier par mot de passe. Existe-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 longues recherches, j'ai trouvé trois approches:
Un ensemble de code source disponible gratuitement, adapté à un seul fichier Zip. 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 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 remplit bien un trou 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 licence d'essai est complexe. C'est également 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
Vous pouvez essayer Zip4j , une pure bibliothèque Java pour gérer le fichier Zip. Il prend en charge le cryptage/décryptage de PKWare et les méthodes de cryptage AES.
Principales caractéristiques:
Licence:
Ce n'est pas une réponse, mais c'est une prudence à garder à l'esprit lors de l'évaluation des solutions potentielles.
Une chose très importante à propos du cryptage Zip:
Il existe plusieurs types de cryptage 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 des applications facilement disponibles en ligne).
Si vous effectuez une sorte de cryptage des fichiers Zip, veuillez vous assurer que vous utilisez l'une des normes de cryptage strictes (je crois que la norme AES 128 et 256 bits de WinZip est la meilleure prise en charge). Voici les spécifications techniques - nous l'avons utilisé lors du développement de notre propre système de cryptage Zip Java crypté (ne peut pas fournir la source - désolé - c'est un usage interne uniquement))
La seule chose pire que de ne pas avoir de cryptage, c'est de penser que vous avez un cryptage et de vous tromper :-)
7-Zip a la possibilité d'ajouter 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 une bonne ration 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 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 est disponible ici: https://christian-schlichtherle.bitbucket.io/truevfs/
Voici un exemple utilisant winzipaes 1.0.1. Notez que ce n'est qu'un Gist, 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 (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.
Pour 3, alors vous pouvez simplement utiliser Java pour crypter le contenu du flux de Zip en tant que fichier normal, probablement préférable de changer l'extension de fichier en .ezip ou somesuch aussi.
Pour 1 et 2, vous pouvez utiliser la solution chillkat comme mentionné, ou un équivalent. Cependant, sachez que chillkat n'est pas une pure Java, elle utilise JNI.
Informations supplémentaires: j'ai googlé un peu plus et en effet, 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 PKWARE Application Note sur le format de fichier .Zip. Il semble s'agir d'un chiffrement effectué sur le flux chiffré. 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 le zipping, mais pas les mots de passe. Et non, je n'en connais pas de libres. Le moins cher J'ai vu 150 $ pour un siège développeur.