# Datei verschlüsseln



## lu.seifer (17. Aug 2004)

Ich würde gerne eine datei mit einem Passwort verschlüsseln.
Der Inhalt der Datei soll nur mit dem richtige Passwort ersichtlich sein.

Hab schon gesucht aber nix gescheites zu gefunden.

Weiss jemand rat? Hat jemand nen Link-tip zum Einsteig?


----------



## Beni (17. Aug 2004)

Es gibt ein Package crypto (wenn du ganz runterscrollst, da hat es noch ein paar Links). Vielleicht ist da was drunter.


----------



## lu.seifer (18. Aug 2004)

Leider nein.
Da hatte ich auch schon geschaut, gibt aber nur die Möglichkeit per Key (der vorher erzeugt wird).


----------



## meez (18. Aug 2004)

Hier: (Benötigt JCE Package)


```
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;

public void setProvider() {
	java.security.Security.addProvider(new com.sun.crypto.provider.SunJCE());
}

public void encryptFile(String originalFile, String encryptedFile, String password) throws Exception {
		CipherOutputStream out;
		InputStream in;
		Cipher cipher;
		SecretKey key;
		byte[] byteBuffer;		
		cipher = Cipher.getInstance("DES");
		key = new SecretKeySpec(password.getBytes(), "DES");
		cipher.init(Cipher.ENCRYPT_MODE, key);
		in = new FileInputStream(originalFile);
		out = new CipherOutputStream(new FileOutputStream(encryptedFile), cipher);
		byteBuffer = new byte[1024];
		for (int n;(n = in.read(byteBuffer)) != -1;out.write(byteBuffer, 0, n));
		in.close();
		out.close();
		//new File(originalFile).delete();
	}


public void decryptFile(String encryptedFile, String decryptedFile, String password) throws Exception {
		CipherInputStream in;
		OutputStream out;
		Cipher cipher;
		SecretKey key;
		byte[] byteBuffer;
		cipher = Cipher.getInstance("DES");
		key = new SecretKeySpec(password.getBytes(), "DES");
		cipher.init(Cipher.DECRYPT_MODE, key);
		in = new CipherInputStream(new FileInputStream(encryptedFile), cipher);
		out = new FileOutputStream(decryptedFile);
		byteBuffer = new byte[1024];
		for (int n;(n = in.read(byteBuffer)) != -1;out.write(byteBuffer, 0, n));
		in.close();
		out.close();
		//new File(encryptedFile).delete();
	}
```

EDIT: Passwort muss 8 Zeichen haben...


----------



## Guest (18. Aug 2004)

wow!
meez - vielen vielen Dank!


----------



## lu.seifer (18. Aug 2004)

Superklasse - vielen Dank!  :applaus: 
Das hilft mir echt richtig jut weiter.... (keine Ironie!!!)


----------



## stevens (15. Dez 2005)

meez hat gesagt.:
			
		

> EDIT: Passwort muss 8 Zeichen haben...



Was mach ich eigentlich, wenn das Passwort keine 8 Zeichen lang ist? Beispielsweise 7 oder 15 Zeichen lang? Ich würde mir eigentlich gern ein kleines Tool zur Verschlüsselung mit AES schreiben, nur weiss ich nicht so recht, wie ich mit der Länge des Passworts umgehen soll. Gibt es da Empfehlungen? Abschneiden? Mit Nullen auffüllen? Klingt beides nicht so security-like.


----------



## Bleiglanz (15. Dez 2005)

suche nach "Password Based Encryption", genau dieser Fall ist im JCE/JCA schon fest eingebaut

Standard ist wohl sowas wie "PBEWithMD5AndDES"


----------



## stevens (15. Dez 2005)

Hm. Da ist man dann aber leider auf DES beschränkt und kann nicht auf die anderen Algorithmen (wie halt eben AES) zurückgreifen. Gibt es keinen einigermassen praktikablen Weg, um aus einem Passwort heraus einen Schlüssel zu generieren?


----------



## Bleiglanz (16. Dez 2005)

bist du sicher dass in der J2SE keine PBE mit AES dabei ist, glaub ich jetzt nicht??

wenn dir das nicht zusagt:

verschlüssele zuerst das Passwort.getBytes("UTF-8") z.B. mit dem Algorithmus "DES/ECB/PKCS5Padding" (analog für AES, Blowfish) dann kriegst du schonmal zumindest ein Vielfaches der Blocklänge, die überflüssigen Blöcke könntest du dann XORen und du hast einen schönen Key

allerdings ist sowas nur für den Privatgebrauch gedacht, die Java PBE verlangt immer einen Zufallsvektor ('Salt') der mitdazugemischt wird


----------

