Ich muss eine Datei komprimieren und mit einem Passwort schützen. Gibt es dafür eine gute (kostenlose) Bibliothek?
Dies muss von einem Drittanbieter geöffnet werden, sodass der Kennwortschutz mit Standardtools funktionieren muss.
Nach langem Suchen habe ich drei Ansätze gefunden:
Ein frei verfügbarer Satz von Quellcode, der für eine einzelne Zip-Datei geeignet ist. Es gibt jedoch keine Lizenz. Die Verwendung ist AesZipOutputStream.zipAndEcrypt (...). http://merkert.de/de/info/zipaes/src.Zip ( https://forums.Oracle.com/forums/thread.jspa?threadID=1526137 =)
UPDATE: Dieser Code ist jetzt Apache-lizenziert und wird unter http://code.google.com/p/winzipaes/ veröffentlicht. Es hat bei mir funktioniert (eine Datei in der Zip-Datei) und füllt eine Lücke in Javas geöffneten Quellbibliotheken.
Ein kommerzielles Produkt (500 USD zum Zeitpunkt des Schreibens). Ich kann nicht überprüfen, ob dies funktioniert, da der Testlizenzansatz komplex ist. Es ist auch eine portierte .NET-App: http://www.nsoftware.com/ipworks/Zip/default.aspx
Ein kommerzielles Produkt (290 US-Dollar zum Zeitpunkt des Schreibens). Nur für Wnidows geeignet, da eine DLL verwendet wird: http://www.example-code.com/Java/Zip.asp
Sie können versuchen, Zip4j , eine reine Java= Bibliothek zur Verarbeitung von Zip-Dateien. Sie unterstützt die Verschlüsselung/Entschlüsselung von PKWare- und AES-Verschlüsselungsmethoden.
Hauptmerkmale:
Lizenz:
Dies ist keine Antwort, aber bei der Bewertung möglicher Lösungen ist Vorsicht geboten.
Eine sehr wichtige Sache bei der Zip-Verschlüsselung:
Es gibt verschiedene Arten der Zip-Verschlüsselung. Der alte Typ (Teil des ursprünglichen Zip-Standards) ist überhaupt keine Mühe wert (mit Apps, die online verfügbar sind, kann er in weniger als 10 Minuten geknackt werden).
Wenn Sie Zip-Dateien verschlüsseln, stellen Sie bitte sicher, dass Sie einen der starken Verschlüsselungsstandards verwenden (ich glaube, dass der 128- und 256-Bit-AES-Standard von WinZip am besten unterstützt wird). Hier sind die technischen Daten - wir haben diese verwendet, als wir unser eigenes Java verschlüsseltes Zip-System) entwickelt haben.
Das einzige, was schlimmer ist, als keine Verschlüsselung zu haben, ist zu glauben, dass Sie eine Verschlüsselung haben und falsch liegen :-)
7-Zip bietet die Möglichkeit, im Befehlszeilenmodus ein Kennwort hinzuzufügen. Vielleicht können Sie es ausführen, um dieses Ergebnis zu erhalten (und es hat auch eine gute Komprimierungsrate).
Nachteile: Externer Prozess, schwer portierbar zu machen (auch wenn 7-Zip selbst portierbar ist), keine sichere Distributionslizenz.
Beachten Sie, dass das Zip-Dienstprogramm von InfoZip, das auch in hohem Maße portabel ist, auch Kennwörter unterstützt.
Sie können auch TrueZip ausprobieren. Funktionen finden Sie unter den folgenden Links: https://christian-schlichtherle.bitbucket.io/truezip/
Den Nachfolger von TrueZip finden Sie hier: https://christian-schlichtherle.bitbucket.io/truevfs/
Hier ist ein Beispiel für die Verwendung von winzipaes 1.0.1. Beachten Sie, dass dies nur eine Zusammenfassung ist. Ich habe diesen Code nicht in genau dieser Form getestet.
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();
Sie können "/tmp/foo.Zip" mit Winzip (v9 +) oder 7za (d. H. 7Zip) auf einem Mac mit dem Kennwort "my-password" entpacken.
Hinweis: Mir ist nicht klar, warum es erforderlich ist, das Kennwort im obigen Code zweimal anzugeben. Ich weiß nicht, was passieren würde, wenn Sie an diesen beiden Stellen unterschiedliche Passwörter verwenden würden.
Wenn Sie ein besseres Nutzungsszenario angeben, gibt es andere Alternativen.
Für 3 kannst du dann einfach Java) verwenden, um den Stream-Inhalt der Zip-Datei als normale Datei zu verschlüsseln, wahrscheinlich am besten, um die Dateierweiterung in .ezip oder so zu ändern.
Für 1 und 2 können Sie dann wie erwähnt die chillkat -Lösung oder eine Entsprechung verwenden. Beachten Sie jedoch, dass chillkat keine reine Java) Lösung ist, sondern JNI verwendet.
Zusatzinfo: Ich habe ein bisschen mehr gegoogelt und es ist in der Tat eine recht häufige Frage, und es scheint, dass es (noch?) Keine freie Lösung gibt.
Jetzt ist der Standardalgorithmus für die Zip-Verschlüsselung genau definiert: Siehe PKWARE's Application Note zum ZIP-Dateiformat. Es scheint sich um eine Verschlüsselung des verschlüsselten Streams zu handeln. Wenn jemand Lust hat, es zu programmieren ...
Nun frage ich mich, warum Sun es nicht in seine Bibliothek aufgenommen hat? Fehlender Standard? Patent/Rechtsfrage? Zu schwach, um brauchbar zu sein?
Gibt es dafür eine gute (kostenlose) Bibliothek?
Java.util.Zip macht das Zippen, aber nicht die Passwörter. Und nein, ich kenne keine freien, die das wollen. Das billigste Ich habe gesehen, dass ein Entwicklerplatz 150 US-Dollar kostet.