Hallo, ich habe mir eine Klasse zusammengebastelt, mit der ich einen Text mit einem 64 Zeichen langen Passwort ver- und entschlüsseln möchte.
Hier mal eine Beispiel Klasse zur Anwendung:
Ich bekomme aber immer bei der Benutzung dieser Klasse das ausgegeben:
Die Verschlüsselung funktioniert, aber die Entschlüsselung nicht. Wo ist der Fehler? Könnt ihr mir helfen?
Java:
import java.security.Key;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class SuperStringCrypt {
private static String k1;
private static String k2;
private static String k3;
private static String k4;
public static void setKeys(String i1, String i2, String i3, String i4) {
k1 = i1;
k2 = i2;
k3 = i3;
k4 = i4;
}
public static String encrypt(String t) {
try {
Cipher c = Cipher.getInstance("AES");
Key key = new SecretKeySpec(k1.getBytes("UTF-8"), "AES");
c.init(Cipher.ENCRYPT_MODE, key);
byte[] encVal = c.doFinal(t.getBytes("UTF-8"));
key = new SecretKeySpec(k2.getBytes("UTF-8"), "AES");
c.init(Cipher.ENCRYPT_MODE, key);
encVal = c.doFinal(encVal);
key = new SecretKeySpec(k3.getBytes("UTF-8"), "AES");
c.init(Cipher.ENCRYPT_MODE, key);
encVal = c.doFinal(encVal);
key = new SecretKeySpec(k4.getBytes("UTF-8"), "AES");
c.init(Cipher.ENCRYPT_MODE, key);
encVal = c.doFinal(encVal);
String base64 = Base64.getEncoder().encodeToString(encVal);
return base64;
} catch(Exception e) {
e.printStackTrace();
}
return null;
}
public static String decrypt(String t) {
try {
Cipher c = Cipher.getInstance("AES");
byte[] decVal = Base64.getDecoder().decode(t);
Key key = new SecretKeySpec(k1.getBytes("UTF-8"), "AES");
c.init(Cipher.DECRYPT_MODE, key);
decVal = c.doFinal(decVal);
key = new SecretKeySpec(k2.getBytes("UTF-8"), "AES");
c.init(Cipher.DECRYPT_MODE, key);
decVal = c.doFinal(decVal);
key = new SecretKeySpec(k3.getBytes("UTF-8"), "AES");
c.init(Cipher.DECRYPT_MODE, key);
decVal = c.doFinal(decVal);
key = new SecretKeySpec(k4.getBytes("UTF-8"), "AES");
c.init(Cipher.DECRYPT_MODE, key);
decVal = c.doFinal(decVal);
return new String(decVal, "UTF-8");
} catch(Exception e) {
e.printStackTrace();
}
return null;
}
}
Hier mal eine Beispiel Klasse zur Anwendung:
Java:
public class Main {
public static void main(String[] args) {
SuperStringCrypt.setKeys("=cRHo28Cf6XnGevD", "qzsLUFIgEtNuV937", "J0WKMwlhakimO1A4", "bTQjpdPSYB5rxZy?");
String encrypted = SuperStringCrypt.encrypt("Hallo Welt");
System.out.println(encrypted);
String decrypted = SuperStringCrypt.decrypt(encrypted);
System.out.println(decrypted);
}
}
Ich bekomme aber immer bei der Benutzung dieser Klasse das ausgegeben:
Java:
rvNr5/x7i1GlVH2Mf90Vw0T31MqN5kqd0cmi6PlrwyxSaxL43AmL8EQF9Ziw+qjjpfVMVRd8BpsFqmXVCTWoCQ==
javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:966)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:436)
at javax.crypto.Cipher.doFinal(Cipher.java:2165)
at SuperStringCrypt.decrypt(SuperStringCrypt.java:57)
at Main.main(Main.java:11)
null
Die Verschlüsselung funktioniert, aber die Entschlüsselung nicht. Wo ist der Fehler? Könnt ihr mir helfen?
Zuletzt bearbeitet: