# Passwort(String) ---> SecretKey(Spec)



## Julius (7. Feb 2008)

Hallo,
Ich hätte mal eine kurze Frage, kann man aus einem Passwort einen SecretKey(Spec) (verschlüsselungsmodus = AES) herstellen, wenn ja, wie (vlt. Link auf die Docu)?

Danke, 
Julius


----------



## HoaX (8. Feb 2008)

sollte über den konstruktor von SecretKeySpec gehn


----------



## Julius (10. Feb 2008)

Nein gibt hier diese Exception:


```
SecretKeySpec skey = new SecretKeySpec(password.getBytes(), "AES");
try {
			Cipher cipher = Cipher.getInstance("AES");
			cipher.init(Cipher.DECRYPT_MODE, skeySpec);
			byte[] original = cipher.doFinal(encrypted);
			originalString = asHex(original);
		} catch(Exception ex) {
			JOptionPane.showMessageDialog(NeuJFrame.me, "[ERROR] WRONG KEY OR WRONG DATA", "ERROR", JOptionPane.ERROR_MESSAGE);
			NeuJFrame.me.writeToLog("[ERROR] WRONG KEY OR WRONG DATA", "Error.log", NeuJFrame.wEiL);
			NeuJFrame.me.writeToLog("[ERROR] WRONG KEY OR WRONG DATA", "Log.log", NeuJFrame.wEiL);
			ex.printStackTrace();
			System.exit(1);
		}
```
"
java.security.InvalidKeyException: Invalid AES key length: 40 bytes
        at com.sun.crypto.provider.AESCipher.engineGetKeySize(DashoA13*..)
        at javax.crypto.Cipher.b(DashoA13*..)
        at javax.crypto.Cipher.a(DashoA13*..)
        at javax.crypto.Cipher.a(DashoA13*..)
        at javax.crypto.Cipher.a(DashoA13*..)
        at javax.crypto.Cipher.init(DashoA13*..)
        at javax.crypto.Cipher.init(DashoA13*..)
        at ip.AES.encrypt(NeuJFrame.java:90)
at ip.NeuJFrame.writeToLog(NeuJFrame.java:1273)
        at ip.NeuJFrame.okk(NeuJFrame.java:1217)
        at ip.NeuJFrame.ok(NeuJFrame.java:1183)
        at ip.NeuJFrame.access$100(NeuJFrame.java:136)
        at ip.NeuJFrame$2.actionPerformed(NeuJFrame.java:226)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6038)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
        at java.awt.Component.processEvent(Component.java:5803)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4410)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2429)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
"


----------



## HoaX (10. Feb 2008)

aes erwartet wie die meisten anderen auch eine bestimmte länge des schlüssels.

außerdem ist String#getBytes eine schlechte wahl, da so nicht sichergestellt ist dass das ergebnis auf 2 unterschiedlichen rechnern das selbe ist.

um eine passende länge des keys zu erzeugen empfehle ich dir MessageDigest zu verwenden um einen SHA1 oder MD5 oder ... Hash zu berechnen und dann diesen als key für aes


----------



## Julius (11. Feb 2008)

die Variable password (String), ist schon ein salted sha-hash.
Aber es muss doch ein Möglichkeit geben dass so hinzubekommen?!
Ob das Ergebnis auf 2 verschiedenen Rechnern das selbe ist, ist egal, nur die Länge muss stimmen. 
Grüße,
Julius


----------



## Julius (11. Feb 2008)

Okay, Lösung gefunden!
Ich darf nicht getBytes benutzen, hattet Recht.
Danke,
Julius


----------



## Backwardsman (12. Feb 2008)

ja, und was hast du jetzt statt dessen benutzt?? poste doch bitte noch deine lösung!


----------

