it-swarm.com.de

Empfehlungen für eine kostenlose Bibliothek zum Komprimieren von Dateien

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.

72

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

32
JodaStephen

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:

  • Erstellen, Hinzufügen, Extrahieren, Aktualisieren und Entfernen von Dateien aus einer Zip-Datei
  • Lesen/Schreiben von passwortgeschützten Zip-Dateien
  • Unterstützt die AES 128/256-Verschlüsselung
  • Unterstützt die Standard-Zip-Verschlüsselung
  • Unterstützt das Zip64-Format
  • Unterstützt die Komprimierungsmethode "Speichern" (keine Komprimierung) und "Entleeren"
  • Erstellen oder Extrahieren von Dateien aus geteilten Zip-Dateien (Beispiel: z01, z02, ... Zip)
  • Unterstützt Unicode-Dateinamen
  • Fortschrittsanzeige

Lizenz:

48
Matt

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 :-)

11
Kevin Day

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.

4
PhiLho

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/

3
Kai Mechel

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.

2
Marc

Wenn Sie ein besseres Nutzungsszenario angeben, gibt es andere Alternativen.

  1. Muss die Zip-Datei von den Standard-Zip-Tools geöffnet werden, die ein Zip-Kennwort verarbeiten können?
  2. Dieselbe Frage wie zuvor werden Sie diese Zip an eine externe Entität weitergeben, die die Zip öffnen muss?
  3. Ist es nur intern und Sie möchten nur den Inhalt des Reißverschlusses schützen?

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.

1
Donal Tobin

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?

1
PhiLho

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.

0
Oli