Ich habe seit mehreren Tagen versucht, in Java eine mit openssl verschlüsselte Nachricht zu entschlüsseln. Die Nachricht wurde mit dem folgenden Befehl verschlüsselt:Java-Entschlüsselung einer verschlüsselten Datei mit openssl aes 256 cbc
openssl enc -a -aes-256-cbc -kfile $ file.key -in toto -out toto.enc.
Die Datei file.key enthält den symmetrischen Schlüssel mit 256 Bits. In dem Befehl wurde kein Salz angegeben und dennoch beginnt die Datei mit Salted__. Hier ist die Klasse, die ich codiert habe, um zu versuchen, die Datei zu entschlüsseln, aber unmöglich, etwas sogar durch Entfernen der 16 Zeichen der Datei zu erhalten, nämlich die: Salted__ + das Salz verschlüsselt. Ich habe verstanden, dass openssl das standardmäßig gemacht hat. Wenn ich versuche zu entschlüsseln, wird eine Ausnahme in Bezug auf den verschlüsselten Text ausgelöst.
Kann mir jemand helfen? eine Spur? eine Idee ?
Vielen Dank.
Der Code:
public class Java {
private static SecretKey key = null;
private static Cipher cipher = null;
public static void main(String[] args) throws Exception
{
String filename = RESOURCES_DIR + "toto.enc";
byte[] key = Base64.decode("2AxIw+/AzDBj83OILV9GDpOs+izDFJEhD6pve/IPsN9=");
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] test = Base64.decode(readFile(filename));
byte[] decryptedBytes = cipher.doFinal(test);
String decryptedText = new String(decryptedBytes, "UTF8");
System.out.println("After decryption: " + decryptedText);
}
public final static String RESOURCES_DIR = "C:/Users/toto/Desktop/";
static String readFile(String filename) throws FileNotFoundException, IOException {
FileReader fr;
BufferedReader br;
fr = new FileReader(new File(filename));
br = new BufferedReader(fr);
String str;
String res = "";
while ((str = br.readLine()) != null) {
res += str;
}
return res;
}
}
Der Fehler:
Exception in thread "main" javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:811)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:676)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:313)
at javax.crypto.Cipher.doFinal(Cipher.java:2131)
at deciphertodeploytest6.Java.main(Java.java:52)
exaktes Duplikat [Openssl AES 256 CBC Java Entschlüsseln Datei mit Salz] (https: // stackoverflow.com/questions/43186915/openssl-aes-256-cbc-java-decrypt-file-with-salt) –
[Java AES 128 verschlüsseln anders als openssl] (http://stackoverflow.com/q/21086103/608639), [Java entspricht einer OpenSSL AES CBC-Verschlüsselung] (http://stackoverflow.com/q/32508961/608639), [Wie dekodiert man eine Zeichenkette codiert mit OpenSSL AES-128-CBC mit Java?] (http://StackOverflow.com/Q/31947256/608639), [Mit Java zu entschlüsseln OpenSSL AES-256-CBC mit den bereitgestellten Schlüssel und iv] (http: // stackoverflow.com/q/15594518/608639) usw. – jww