# TrueZip - Passwort bei Zipfile



## J@BA (27. Aug 2010)

Hallo,

ich bin grad etwas am verzweifeln und erhoffe mir einen guten Tipp.
Ich versuche seit Tagen zip Files zu erstellen und wieder auszulesen. Das ist soweit kein Problem.

Nun möchte ich aber das ganze noch mit einem Passwort versehen. 
Mit den Standard Java Zip Geschichten kommt man hier schonmal nicht weiter also hab ich Google gefragt und bin über TrueZip gestoßen (Wird auch hier im Forum wenn es um Passwörtern bei Zip-Files geht gefunden)
Hier gibts TrueZip: TrueZip
Und hier eine Beschreibung: TrueZip Manual

Um ehrlich zu sein find ich die Beschreibung sehr verwirrend. Auch das HelloWorld Beispiel bringt mich nicht weiter.

Ein Archiv anlegen und Dateien hinzufügen bzw wieder auslesen ist alles kein Problem. Aber ich bekomm einfach kein Passwort drüber

Zip Archiv erstellen

```
String zipFilename = "c:/test/test.zip";
new File(zipFilename).mkdir();
```

Dateien ins Archiv packen:

```
String filename= "test.txt"
new File(filename).copyTo(new File(zipFilename + filename));
```

Und wieder auslesen

```
new File(filename).copyFrom(new File(zipFilename + filename));
```

Klappt alles Prima, aber halt ohne Passwort.

Das angesprochene HalloWorld Beispiel findet man auch hier in einem anderen Thema (ganz unten): 
http://www.java-forum.org/java-basics-anfaenger-themen/101612-textdatei-zippen-passwort-sichern.html

Wäre super wenn jemand weiß wie das geht bzw ein ordentliches Beispiel an der Hand hat. Danke


----------



## Gast2 (27. Aug 2010)

Warum nicht einfach winzipaes nehmen? 


```
AesZipFileEncrypter.zipAndEncrypt(new File("test.txt"), new File("test.zip"), "password");
```


----------



## J@BA (27. Aug 2010)

Von AesZipFileEncrypter find ich keine jar Datei. Weder über Google noch durch Maven. Sondern nur den Code.

Einmal weiß ich nicht wie das mit den Lizenzbestimmungen ist, gut das könnten man noch in Erfarhung bringen ABER

ich habe es testweise ausprobiert und wenn ich die Klassen bei mir implementiere leuchtests sehr lustig Rot. Und zwar nicht nur an 1-2 Stellen 

Scheint leider inakzeptabel zu sein.


----------



## faetzminator (27. Aug 2010)

Da benötigst du noch die Lib mit [c]de.idyl.crypto.zip[/c] drin 

Edit: Wie wärs mit http://winzipaes.googlecode.com/files/winzipaes_src_20100818.zip?


----------



## J@BA (27. Aug 2010)

exakt das ganze paket hab ich runtergeladen. 

Ah ich sehs grad. Mir würde noch das Paket org.bouncycastle.crypto fehlen.
Gut das kann man bestimmt noch irgendwo finden, aber auch das würde nicht alles aus der Welt schaffen.
Aber ein nogo ist:

```
Syntax error, parameterized types are only available if source level is 1.5
```
:noe:


----------



## faetzminator (27. Aug 2010)

Nogo, dass du Java 1.5 benötigst? Nö: Nogo, 1.4 zu verwenden :bahnhof:


----------



## J@BA (27. Aug 2010)

sind wir nicht schon bei 1.6 oder hab ich was verpasst 
Zumindest verwende ich 1.6


----------



## faetzminator (27. Aug 2010)

Ja, aber die Fehlermeldung zeugt davon, dass du <1.5 verwendest...


----------



## Gast2 (27. Aug 2010)

Von winzipaes gibt es keine jar release. Also source runterladen, BouncyCastle runterladen: http://www.bouncycastle.org/download/bcprov-jdk16-145.jar, jar aus winzipaes bauen, in den classpath werfen und losprogrammieren. 

Einfaches Beispiel:

```
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.zip.DataFormatException;

import de.idyl.crypto.zip.AesZipFileDecrypter;
import de.idyl.crypto.zip.AesZipFileEncrypter;
import de.idyl.crypto.zip.impl.ExtZipEntry;

public class ZipSample {

	public static void main(String[] args) throws IOException, DataFormatException {
		File inFile = new File("in/test.txt");
		File zipFile = new File("zip/test.zip");
		String password = "password";
		AesZipFileEncrypter.zipAndEncrypt(inFile, zipFile, password);
		System.out.println("Created zip File " + zipFile.getAbsolutePath());

		AesZipFileDecrypter decoder = new AesZipFileDecrypter(zipFile);
		List<ExtZipEntry> zipEntries = decoder.getEntryList();
		for (ExtZipEntry zipEntry : zipEntries) {
			System.out.println("Deflating Encrypted File "+zipEntry.getName());
			File outFile = new File("out/test.txt");
			decoder.extractEntry(zipEntry, outFile, password);
		}
	}
}
```


----------



## Gast2 (27. Aug 2010)

Ich bin mal so nett - hab dir eine jar von winzipaes gebaut. Das bcprov-jdk16-145.jar brauchst du aber trotzdem noch.


----------



## J@BA (30. Aug 2010)

faetzminator hat gesagt.:


> Ja, aber die Fehlermeldung zeugt davon, dass du <1.5 verwendest...




Wahrscheinlich hast du recht, aber ich versteh es nicht.

Ich hab aktuell drauf 1.6.0 Update 20 und 21. jeweils beides als 32 und als 64 Bit Version.
mein Eclipse Helios 64 starte ich mit der 1.6.0_20 (64 Bit).
Eben nochmal nachgeschaut, damit ich doch net aufn Kopf gefallen bin. Es wird auch defenetiv 1.6.0_20 verwendet, zumindest stehts so in den Properties unter Build Path.
Aber als ich den QuickFix verwendet habe um auf 1.5 zu gehen sind die Fehlermeldungen weg...
In den Projekt Properties unter java compiler steht nun 1.5. den hab ich nun auf 1.6 gesetzt weiterhin geht alles.
Kann es sein das (aus welchen Gründen auch immer) Eclipse hier 1.4 verwendet ? Anders kann ich mir das nicht erklären. Aber warum sollte er das nehmen wenn 1.6 installiert ist.

Sorry ich versteh es grad nicht mehr 

Und dann danke Fassy für das Beispiel und die jar Datei. Ich werde es sofort testen.


----------



## faetzminator (30. Aug 2010)

Natürlich, du kannst in der Version kompilieren, in welcher du willst. War wohl auf 1.4. Findest du jeweils (wie du bereits herausgefunden hast) in den Project Properties


----------



## J@BA (30. Aug 2010)

So nach etwas rumexperementieren mit dem Ganzen:

Mehrere Dateien zu einem Zip-Archiv hinzufügen habe ich nun so realisiert.

```
File inFile = new File(in/test.txt);
        File inFile2 = new File(in/test2.txt);
        File zipFile = new File(zip/test.zip);
        String password = "password";
        
        AesZipFileEncrypter aesZip = new AesZipFileEncrypter(zipFile);
        aesZip.add(inFile, password);
        aesZip.add(inFile2, password);
        aesZip.close()
```

Funktioniert soweit gut. Daher denke ich ist es auch so gedacht das es so benutzt wird. Hab leider auf die schnelle keine Dokumentation gefunden.
Dann nochmal danke an euch beide :toll:


----------



## CSchlichtherle (27. Okt 2011)

Nur der Vollständigkeit halber für den zufälligen Finder: Seit der Version 7.3 unterstützt TrueZIP auch WinZIP AES Encryption. Für diesen Thread war das aber zu spät.


----------

