Empfehlungen zu einer kostenlosen Bibliothek zum Komprimieren von Dateien [geschlossen]


75

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.


9
Wie wurde diese hilfreiche Frage geschlossen?
Dmitry Zaytsev

2
Weil Meta entschieden hat, dass nützliche Fragen, die sich nur geringfügig in Meinungsfragen verwandeln könnten, nicht für StackOverflow geeignet sind. Es ist traurig, aber wahr.
user314104

Zip4j unterstützt die Verschlüsselung der Dateiliste: stackoverflow.com/questions/15085249/…
kinjelom

Antworten:


35

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


Hat jemand einen Link zur Verwendung des Winzipaes-Codes, der in diesem Link veröffentlicht ist? Ich muss mehr als eine Datei hinzufügen und könnte etwas Hilfe gebrauchen, um zu verstehen, wie man sie verwendet
frak

@frak Sehen Sie sich den Quellcode für AesFileEncrypter an: Sie müssen lediglich eine Instanz dieser Klasse erstellen und dann hinzufügen, was Sie möchten.
Christopher Schultz

1
winzipaes ist verfügbar über Maven repo mvnrepository.com/artifact/de.idyl/winzipaes
Marc

53

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:

  • Erstellen, Hinzufügen, Extrahieren, Aktualisieren, Entfernen von Dateien aus einer Zip-Datei
  • Passwortgeschützte Zip-Dateien lesen / schreiben
  • Unterstützt die AES 128/256-Verschlüsselung
  • Unterstützt die Standard-Zip-Verschlüsselung
  • Unterstützt das Zip64-Format
  • Unterstützt die Komprimierungsmethode Store (No Compression) und Deflate
  • Erstellen oder Extrahieren von Dateien aus geteilten Zip-Dateien (Beispiel: z01, z02, ... zip)
  • Unterstützt Unicode-Dateinamen
  • Fortschrittsüberwachung

Lizenz:


1
Und es funktioniert auch perfekt mit Android :) Tolle Bibliothek mit hervorragenden Beispielen +1!
Jay Sidri

5
Es sieht so aus, als wäre Zip4j verlassen: - /
Patrick Cornelissen

funktioniert aber immer noch.
Deniss M.

1
@PatrickCornelissen Es wurde für einige Jahre aufgegeben, aber seit Mitte 2019 wieder zur Unterstützung
Srikanth Reddy Lingala

12

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


2
Möglicherweise möchten Sie beide unterstützen. AES-verschlüsselte Zip-Dateien werden von Windows Explorer noch nicht unterstützt, während PKZIP-verschlüsselte Zip-Dateien dies sind. Sie können die Einträge beider Arten von verschlüsselten Zip-Dateien anzeigen, aber Sie können nur mit Windows Explorer aus einer PKZIP-verschlüsselten (schwach verschlüsselten) Zip-Datei extrahieren. Sie benötigen WinZip oder ein anderes geeignetes Tool unter Windows, um AES-verschlüsselte Zips zu öffnen. (Das kostenlose DotNetZip wird mit einem solchen Tool geliefert).
Cheeso

Windows XP SP3 und Vista unterstützen beide AES-Zip-Dateien. Meine Meinung (mit der jeder nicht einverstanden ist) ist, dass es eine schlechte Idee ist, etwas zu unterstützen, das nicht einmal aus der Ferne sicher ist. M $, das kein sicheres Format unterstützt, ist kein gültiger Grund für die Implementierung von etwas Unsicherem.
Kevin Day

Von Winzipaes erstellte (siehe oben) ZIP-Dateien werden hier auf meinem aktuellen Windows XP-Image nicht geöffnet. Windows stöhnt über ein nicht unterstütztes Komprimierungsschema. Sie öffnen jedoch gut mit 7z.
Tom Chiverton

4

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.


Ich glaube, 7-zip verfügt über Bibliotheken, die in selbstgeschriebenen Programmen verwendet werden können. Es müsste also kein externer Prozess sein.
Sumpf

@Quagmire 7-zip verfügt nicht über einen nativen Java-Build (mit Ausnahme des LZMA-Algorithmus). Daher erfordert die Verwendung von 7z für die Arbeit mit ZIP-Dateien einen externen Prozess.
Christopher Schultz

@ ChristopherSchultz in der Tat. Ich nehme an, man kann auch einen JNI- oder JNA-Wrapper schreiben, um weniger Probleme zu haben.
PhiLho

Es ist auch erwähnenswert, dass das ZIP 2.0-kompatible "Passwort" schrecklich kaputt ist und nicht für andere Zwecke verwendet werden sollte, als Kleinkinder davon abzuhalten, Ihre Dateien anzusehen.
Christopher Schultz

3

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/


1
Ich wünschte, ich hätte das früher gesehen, Zip4j ist in Ordnung, aber das ist besser. Insbesondere verarbeitet es einen breiteren Bereich von Eingaben, wie z. B. selbstextrahierende und verschachtelte Zip-Dateien und andere mathematische Dinge, und wird nicht aufgegeben.
Thymian

2

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.


1

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

  1. Müssen Sie die Zip-Datei mit den Standard-Zip-Tools öffnen, die ein Zip-Passwort verarbeiten können?
  2. Die gleiche Frage wie zuvor: Übergeben Sie diese Zip an eine externe Entität, 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 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.


Chillkat ist nicht "kostenlos", es ist Trialware.
James Schek

1

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?


Genau das habe ich vor ungefähr 5 Jahren für eine unserer Apps getan. Es hat einige Mühe gekostet (und ich kann leider keine Postleitzahl dafür) - aber es ist gut zu wissen, dass es möglich ist. Wir haben tatsächlich das von WinZip geförderte starke AES-Verschlüsselungssystem implementiert.
Kevin Day

0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.