Ich muss eine Datei komprimieren und mit einem Passwort schützen. Gibt es dafür eine gute (kostenlose) Bibliothek?
Dies muss von einem Dritten geöffnet werden, daher muss der Kennwortschutz mit Standardtools funktionieren.
Ich muss eine Datei komprimieren und mit einem Passwort schützen. Gibt es dafür eine gute (kostenlose) Bibliothek?
Dies muss von einem Dritten geöffnet werden, daher muss der Kennwortschutz mit Standardtools funktionieren.
Antworten:
UPDATE 2020: Es gibt jetzt andere Möglichkeiten, insbesondere Zip4J .
Nach langem Suchen habe ich drei Ansätze gefunden:
Ein frei verfügbarer Satz von Quellcode, der für eine einzelne 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 von Apache lizenziert und wird unter https://github.com/mobsandgeeks/winzipaes veröffentlicht (exportiert von der ursprünglichen Startseite bei Google Code ). Es hat bei mir funktioniert (eine Datei in der Zip-Datei) und füllt eine Lücke in Javas Open Source-Bibliotheken.
Ein kommerzielles Produkt (500 US-Dollar zum Zeitpunkt des Schreibens). Ich kann nicht überprüfen, ob dies funktioniert, da der Ansatz der Testlizenz 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 Zip4j ausprobieren , eine reine Java-Bibliothek für die Verarbeitung von Zip-Dateien. Es unterstützt die Verschlüsselung / Entschlüsselung von PKWare- und AES-Verschlüsselungsmethoden.
Hauptmerkmale:
Lizenz:
Dies ist keine Antwort, aber es ist eine Vorsicht, die Sie bei der Bewertung möglicher Lösungen berücksichtigen sollten.
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 (er kann mit Apps, die einfach online verfügbar sind, 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 bei der Entwicklung unseres eigenen Java-verschlüsselten Zip-Systems verwendet (Quelle kann nicht angegeben werden - Entschuldigung - nur für den internen Gebrauch)
Das einzige, was schlimmer ist als keine Verschlüsselung zu haben, ist zu denken, dass Sie 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 Komprimierungsration).
Nachteile: externer Prozess, schwer portabel zu machen (selbst wenn 7-Zip selbst portabel ist), nicht sicher, ob eine Vertriebslizenz vorliegt.
Beachten Sie, dass das Zip-Dienstprogramm von InfoZip, das ebenfalls sehr 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 mit winzipaes 1.0.1. Beachten Sie, dass dies nur ein Kern 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 (dh 7zip) auf einem Mac mit dem Kennwort "my-password" entpacken.
Hinweis: Mir ist nicht klar, warum das Kennwort im obigen Code zweimal angegeben werden muss. 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 können Sie dann einfach Java verwenden, um den Stream-Inhalt der Zip-Datei als normale Datei zu verschlüsseln. Wahrscheinlich ist es am besten, die Dateierweiterung in .ezip oder so zu ändern.
Für 1 und 2 können Sie dann die erwähnte Chillkat- Lösung oder ein Äquivalent verwenden. Beachten Sie jedoch, dass Chillkat keine reine Java-Lösung ist, sondern JNI verwendet.
Zusätzliche Informationen: Ich habe ein bisschen mehr gegoogelt und tatsächlich ist es eine ziemlich häufige Frage, und es scheint, dass es (noch?) Keine kostenlose Lösung gibt.
Jetzt ist der Standardalgorithmus für die Zip-Verschlüsselung genau definiert: Siehe den Anwendungshinweis von PKWARE 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? Mangel an Standard? Patent- / Rechtsfrage? Zu schwach, um verwendet werden zu können?
Gibt es dafür eine gute (kostenlose) Bibliothek?
java.util.zip führt das Zippen durch, die Kennwörter jedoch nicht. Und nein, ich kenne keine freien, die das tun. Das billigste, das ich gesehen habe, ist 150 Dollar für einen Entwicklersitz.