Несколько дней пытаюсь расшифровать на java сообщение, зашифрованное с помощью openssl. Сообщение было зашифровано с помощью следующей команды:
openssl enc -e -aes-256-cbc -kfile $ file.key -in toto -out toto.enc.
Файл file.key содержит симметричный ключ длиной 256 бит. В команде не указана соль, но файл начинается с Salted__. Вот класс, который я написал, чтобы попытаться расшифровать файл, но невозможно ничего получить, даже удалив 16 символов файла, а именно: Salted__ + зашифрованная соль. Я так понял, что openssl делает это по умолчанию. Когда я пытаюсь расшифровать, выдается исключение в отношении зашифрованного текста.
Кто-нибудь может мне помочь? трек ? идея ?
Большое Вам спасибо.
Код :
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;
}
}
Ошибка :
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)