# javax.crypto.SecretKey -  Einfaches Beispiel gewünscht ;-)



## reibi (27. Sep 2006)

Hallo,

ich versuche mit dem "javax.crypto"-Package ein passwort zu ver-und endschlüsseln. Ich benutze dabei das gleiche StandardBeispiel wie alle, nämlich das aus: javaalmanac.com -- crypto

und das sieht von mir *vereinfacht *so aus:



```
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

public class Encryption {
	Cipher ecipher;
	Cipher dcipher;

	public Encryption(SecretKey key) throws Exception {
		ecipher=Cipher.getInstance("DES");
		dcipher=Cipher.getInstance("DES");
		ecipher.init(Cipher.ENCRYPT_MODE, key);
		dcipher.init(Cipher.DECRYPT_MODE, key);
	} // end Encryption()

	public String encrypt(String str) throws Exception {
		// Encode the string into bytes using utf-8
		byte[] utf8=str.getBytes("UTF8");
		byte[] enc=ecipher.doFinal(utf8);

		return new sun.misc.BASE64Encoder().encode(enc);
	} // end encrypt()

	public String decrypt(String str) throws Exception {
		byte[] dec=new sun.misc.BASE64Decoder().decodeBuffer(str);
		byte[] utf8=dcipher.doFinal(dec);

		return new String(utf8, "UTF8");
	} // end decrypt()

	public static void main(String[] args) {
		try {
			SecretKey key=KeyGenerator.getInstance("DES").generateKey();

			Encryption myEncryption=new Encryption(key);
			String encrypted=myEncryption.encrypt("dasGeheimeWort");
			System.out.println("Encrypted="+encrypted);

			String decrypted=myEncryption.decrypt(encrypted);
			System.out.println("Decrypted="+decrypted);
		} // end try
		catch(Exception e) {
		} // end catch
	} // end main()
} // end Encryption
```


Mein Problem ist aber, dass sich der *SecretKey * bei jedem neuen Start verändert, weil er neu generiert wird. 

Den kann ich irgendwie auch nicht fest machen.

Resultat ist das das verschlüsselte Passwort beim nächsten Start nicht mehr gültig ist.


--> Gibts irgendwie ne Möglichkeit diesen SecureKey zu initialisieren? Wenn geht ohne extra Implementation eines Fremdanbieters. 

Also ich suche sowas wenn geht:

SecretKey key = new SecureKeyImpl("Der Schlüssel");

vielen Dank fürs helfen


----------



## Guest (27. Sep 2006)

```
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
DESKeySpec keySpec = new DESKeySpec("sowasvongeheim".getBytes()); // !!! darf nicht kürzer als 8 Byte sein
SecretKey key = keyFactory.generateSecret(keySpec);
```
Alternativ kannst du den generierten SecretKey wiederverwenden
	
	
	
	





```
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
DESKeySpec keySpec = (DESKeySpec)keyFactory.getKeySpec(key, DESKeySpec.class);
byte keyBytes[] = keySpec.getKey(); // Das hier kannst du wiederverwenden. Siehe oben.
```


----------



## reibi (28. Sep 2006)

Funktioniert gut ! vielen Dank

Habe noch n Problem mit nem anderen VerschlüsselungsALG ... dazu mach eich aber ein neues Forum auf ;-)


----------

