# AES Key aus Text erzeugen



## Arbon (14. Jan 2010)

Hallo!

Ich möchte aus einem Text (String) einen AES-Key erzeugen. Habe dazu folgende Methode gemacht:


```
private SecretKey generateKeyFromText(String text)
			throws NoSuchAlgorithmException, InvalidKeySpecException {
		SecretKeyFactory factory = SecretKeyFactory.getInstance("AES");
		SecretKeySpec spec = new SecretKeySpec(text.getBytes(), "AES");
		SecretKey key = factory.generateSecret(spec);
		return key;
	}
```

Allerdings bekomme ich jedes mal folgende Exception:


```
java.security.NoSuchAlgorithmException: AES SecretKeyFactory not available
	at javax.crypto.SecretKeyFactory.<init>(DashoA13*..)
	at javax.crypto.SecretKeyFactory.getInstance(DashoA13*..)
	at at.arm.jsafe.Encrypt.generateKeyFromText(Encrypt.java:60)
	at at.arm.jsafe.Encrypt.<init>(Encrypt.java:36)
	at at.arm.jsafe.Encrypt.main(Encrypt.java:20)
```

Was ich ebenfalls noch nicht herausgefunden habe ist, wo man die Schlüssellänge und Rundenanzahl des AES einstellen kann.

mfg
Arbon


----------



## JohannisderKaeufer (14. Jan 2010)

Hast du die 

Java Cryptography Extension (JCE) Unlimited Strength... 

installiert?

Es sieht nämlich so aus das der Algorithmus den du verwenden möchtest nicht im SDK dabei ist. Das heißt du mußt den Algorithmus extra runterladen.


----------



## Arbon (16. Jan 2010)

Verwende jetzt den SHA-256 um mir einen Key aus dem Passwort zu generieren. Dadurch ist der Schlüssel 256 Bit lang und das Programm verwendet jetzt den AES256. Da es sich um einen Passwortmanager handelt, ist das schonmal sehr gut, immerhin soll dem Benutzer ja auch eine gewisse Sicherheit geboten werden.


```
private SecretKey generateKeyFromText(String text) {
		MessageDigest digester;
		try {
			digester = MessageDigest.getInstance("SHA-256");
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
			return null;
		}
		char[] password = text.toCharArray();
		for (char element : password)
			digester.update((byte) element);
		byte[] passwordData = digester.digest();
		SecretKey key = new SecretKeySpec(passwordData, "AES");
		return key;
	}
```

Ich habe allerdings um diese unlimited Strenght wirksam werden zu lassen 2 Dateien im jre ersetzen müssen. Geht das nicht irgendwie anders? Ich möchte nicht, dass später jeder, der das Programm verwenden möchte, das ebenfalls tun muss, kann man diese Files nicht irgendwie der jar beilegen?


----------

