Hallo mal wieder!
Ich versuche einen String mittels AES zu verschlüsseln und wieder zu entschlüsseln. Die Verschlüsselung klappt wunderbar. doch bei der Erstellung des entschlüsselten Strings gibt es immer eine Exception.
Komischerweise klappt es wenn ich den String am Ende der Verschlüsselungsmethode aufrufe. Bringt aber nicht viel da ich so nur den gerade verschlüsselten Text entschlüsseln kann und naja ich glaube es ist logisch das dass nicht der Sinn der Sache ist.
Ich hoffe ihr könnt mir helfen.
Hier der Code:
Ich versuche einen String mittels AES zu verschlüsseln und wieder zu entschlüsseln. Die Verschlüsselung klappt wunderbar. doch bei der Erstellung des entschlüsselten Strings gibt es immer eine Exception.
Komischerweise klappt es wenn ich den String am Ende der Verschlüsselungsmethode aufrufe. Bringt aber nicht viel da ich so nur den gerade verschlüsselten Text entschlüsseln kann und naja ich glaube es ist logisch das dass nicht der Sinn der Sache ist.
Ich hoffe ihr könnt mir helfen.
Hier der Code:
Java:
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
public class AesCipher {
private static SecretKey key = null;
public static void main(String[] args) {
gen();
String text = "Dies ist ein Text";
String encrypted = new String(encrypt(text.getBytes()));
String decrypted = new String(decrypt(encrypted.getBytes()));
System.out.println("Original: " + text);
System.out.println("Verschlüsselt: " + encrypted);
System.out.println("Entschlüsselt: " + decrypted);
}
private static void gen() {
KeyGenerator keyGen = null;
try {
keyGen = KeyGenerator.getInstance("AES");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
keyGen.init(128);
key = keyGen.generateKey();
}
private static byte[] encrypt(byte[] textBytes) {
byte[] encryptedBytes = null;
Cipher cipher = null;
try {
cipher = Cipher.getInstance("AES");
} catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
cipher.init(Cipher.ENCRYPT_MODE, key);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
encryptedBytes = cipher.doFinal(textBytes);
} catch (IllegalBlockSizeException | BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return encryptedBytes;
}
private static byte[] decrypt(byte[] encryptedBytes) {
byte[] decryptedBytes = null;
Cipher cipher = null;
try {
cipher = Cipher.getInstance("AES");
} catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
cipher.init(Cipher.DECRYPT_MODE, key);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
decryptedBytes = cipher.doFinal(encryptedBytes);
} catch (IllegalBlockSizeException | BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return decryptedBytes;
}
}
Code:
javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:989)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:845)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
at javax.crypto.Cipher.doFinal(Cipher.java:2165)
at AesCipher.decrypt(AesCipher.java:88)
at AesCipher.main(AesCipher.java:20)
Exception in thread "main" java.lang.NullPointerException
at java.lang.String.<init>(Unknown Source)
at AesCipher.main(AesCipher.java:20)