# Datei beim schreiben verschlüsseln beim lesen entschlüsseln



## TheTobi (8. Apr 2009)

Hi,
Ich habe ein Properties Objekt, dieses fülle ich und würde es gerne danach in eine Datei schreiben. Nur schreibe ich in dieses Properties Objekt auch ein Passwort rein, was man mit nem einfachen Texteditor aus der geschriebenen datei auslesen könnte.

Gibt es eine Lösung wie ich etwas verschlüsselt in eine Datei schreibe und beim lesen entschlüssel kann? 


*Habe nach dem schreiben der datei keine möglichkeit wie bei einem Login einen Passwörter abgleich zu machen.*


----------



## diggaa1984 (8. Apr 2009)

fleicht findst dich ja da zurecht: javax.crypto


----------



## Der Müde Joe (8. Apr 2009)

Tiny Encryption Algorithm ? Wikipedia


----------



## TheTobi (8. Apr 2009)

mal wieder super antworten. In der Docu hab ich schon gesucht, aber nicht das richtige gefunden, gerade deshalb frag ich ja nach ob jemand weiss wie man das bewerkstelligen kann und mit TEA kann ich auch nicht viel anfangen, bringt mir genauso viel wie wenn jemand MD5,SHA-1,blowfish bla blubb hinschreibt


----------



## hdi (8. Apr 2009)

Und wieso kannst du damit nichts anfangen? TEA ist genau das, was du suchst. Zumindest das, was du _sagtest_, das du suchst. Welche Bedingung erfüllen denn TEA, blowfish usw nicht, die du haben möchtest?


----------



## TheTobi (9. Apr 2009)

Naja welche Klassen kann ich denn benutzen, hab in der Java Docu keine gefunden die mit TAE Arbeitet. Ich will ja nicht alles vorgekaut haben, aber wenn man mir sagt welche Klassen und methoden ich benutzen könnte wäre mir schon geholfen...


----------



## diggaa1984 (9. Apr 2009)

wenns da keine klassen gibt die das nutzen, wo wäre das problem anhand der referenzimplementierung den code in java zu schreiben ???:L viel is ja nich :bahnhof:


----------



## dayaftereh (9. Apr 2009)

Hey also ich habe mir mal eine Klasse geschieben um AES zu verschlüsseln. Die Klasse ermöglicht es auf byte-Ebene oder Direckt Strings. Ich habe das genutzt um eine Chat zu verschlüsseln, vieleicht hilft es. man muss einfach nur eine Password angeben!Scahu dir die Main-Methode an^^

Also AEScrypter.java :

```
package Crypter;

import java.security.MessageDigest;
import java.security.spec.AlgorithmParameterSpec;
import java.util.Arrays;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;

public class AEScrypter {

	Cipher ecipher;
	Cipher dcipher;

	byte[] iv = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
			0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };

	
	public AEScrypter(String password) {
		try {

			BASE64Decoder b64 = new BASE64Decoder();
			byte[] cipherText = b64.decodeBuffer(password);
			MessageDigest messagedigest = MessageDigest.getInstance("MD5");
			messagedigest.reset();
			messagedigest.update(cipherText);
			Arrays.fill(cipherText, (byte) 0);

			SecretKeySpec skeySpec = new SecretKeySpec(messagedigest.digest(),"AES");
			
			AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);

			ecipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
			dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

			ecipher.init(Cipher.ENCRYPT_MODE, skeySpec, paramSpec);
			dcipher.init(Cipher.DECRYPT_MODE, skeySpec, paramSpec);
		} catch (Exception e) {
			System.err.println(e);
		}
	}

	public String StringToAES(String str){
		try {
			byte[] utf8 = str.getBytes("UTF8");
			byte[] enc = ecipher.doFinal(utf8);
			str = new sun.misc.BASE64Encoder().encode(enc);
			str = str.replace("\n", "");
			str = str.replace("\r", "");
		} catch (Exception e) {
			System.err.println(e);
		}
		return str;		
	}
	
	public byte[] encrypt(byte[] bytes) {
		byte[] enc = null;
		try {			
			enc = ecipher.doFinal(bytes);		
		} catch (Exception e) {
			System.err.println(e);
		}
		return enc;
	}
	
	public byte[] decrypt(byte[] bytes) {
		byte[] dec = null;
		try {			
			dec = dcipher.doFinal(bytes);			
		} catch (Exception e) {
			System.err.println(e);
		}
		return dec;
	}

	public String AEStoString(String str) {
		try {
			byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);
			byte[] utf8 = dcipher.doFinal(dec);
			return new String(utf8, "UTF8");
		} catch (Exception e) {
			System.err.println(e);
		}
		return str;
	}

	/*
	public static void main(String[] args) {
		AEScrypter aesCrypter = new AEScrypter("myPassword");
		
		String str = "dayaftereh";
		str = aesCrypter.StringToAES(str);
		System.out.println("en: "+str);
		System.out.println("de: "+aesCrypter.AEStoString(str));
		
	}
	*/
	

}
```


----------



## TheTobi (9. Apr 2009)

@dayaftereh: Danke, denke das hilft mir.....


----------



## dayaftereh (9. Apr 2009)

Hey ich habe auch noch die DES verschlüsselung. Wenn du interessiert bist, kann ich die auch Morgen Posten^^ Ist nur nicht so siecher wie AES.

viel Spaß


----------



## TheTobi (10. Apr 2009)

nee danke AES reicht mir....


----------



## fjord (10. Apr 2009)

das Passwort übrigens nicht im Quellcode speichern, sonst kann man es einfach auslesen. Das muss sich dann schon der Benutzer merken.


----------

