Hallo!
Ich habe eine Klasse die einen Text mittels AES Ver- und auch wieder Entschlüsseln kann. Das Problem besteht nur darin, dass ich beim Erzeugen des Strings der den entschlüsselten Text enthält eine Exception bekomme. Komischerweise funktioniert es aber, wenn ich den String am ende der Verschlüsselungsmethode erzeuge. Bringt logischerweise aber nix.
Bitte um Hilfe!
Danke schon mal!
Hier der Fehler:
Ich habe eine Klasse die einen Text mittels AES Ver- und auch wieder Entschlüsseln kann. Das Problem besteht nur darin, dass ich beim Erzeugen des Strings der den entschlüsselten Text enthält eine Exception bekomme. Komischerweise funktioniert es aber, wenn ich den String am ende der Verschlüsselungsmethode erzeuge. Bringt logischerweise aber nix.
Bitte um Hilfe!
Danke schon mal!
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;
}
}
Hier der Fehler:
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)