Я пытаюсь расшифровать файл *.ovpn который зашифрованный с помощью команды openssl enc -in infile.txt -out encrypted.dat -e -aes256 -k key_firebase
Файл скачиваеться по ссылке, но я скачиваю его с помощью следующего кода.
private String enctyptionKey = "63efc5743d9927c5993a05bdc5220b9eca8e38b5df829ca587a57f8ae423676b5fd79f641e375d0a0b3e2e03e7a079ea97cdah26bb2e15213daabb468760f425";
void main(){
URL url = new URL("https://encryptedfile.url");
InputStream inputStream = url.openStream())
byte[] b = new byte[1024];
ByteArrayOutputStream os = new ByteArrayOutputStream();
int c;
while ((c = inputStream.read(b)) != -1) {
os.write(b, 0, c);
}
String result = De.decryptMsg(os.toByteArray());
}
class De {
public static byte[] hex2byte(byte[] b) {
if ((b.length % 2) != 0)
throw new IllegalArgumentException("hello");
byte[] b2 = new byte[b.length / 2];
for (int n = 0; n < b.length; n += 2) {
String item = new String(b, n, 2);
b2[n / 2] = (byte) Integer.parseInt(item, 16);
}
return b2;
}
public static byte[] decryptMsg(String secretKeyString, byte[] encryptedMsg)
throws Exception {
// String algorithm = "AES/ECB/PKCS5Padding";
String algorithm = "AES";
// generate AES secret key from the user input secret key
Key key = new SecretKeySpec(secretKeyString.getBytes(), algorithm);
// get the cipher algorithm for AES
Cipher c = Cipher.getInstance(algorithm);
// specify the decryption mode
c.init(Cipher.DECRYPT_MODE, key);
// decrypt the message
return c.doFinal(encryptedMsg);
}
}
И я получаю ошибку. InvalidKeyException: Invalid AES key length: 128 bytes
Но данные нормально расшифровываеться командой
openssl enc -in encrypted.rtf -out decrypted.rtf -d -aes256 -k 63efc5743d9927c5993a05bdc5220b9eca8e38b5df829ca587a57f8ae423676b5fd79f641e375d0a0b3e2e03e7a079ea97cdah26bb2e15213daabb468760f425
Если кто может указать направление куда смотреть, буду благодарен.
Когда вы выполняете команду openssl enc -in infile.txt -out encrypted.dat -e -aes256 -k key_firebase, key_firebase - это не ключ, это текст, из которого openssl генерирует ключ:
The password is used to derive the actual key which is used to encrypt your data.
Что бы посмотреть какой ключ был сгенерирован, вы можете добавить параметр -P (вывести ключи, но не шифровать) или -p (вывести ключи и зашифровать):
openssl enc -in infile.txt -out encrypted.dat -e -aes256 -k key_firebase -P
8 байт соли, которые использовались для генерации ключа, потом добавляются в начало зашифрованного файла.
Java выдает правильное исключение, для AES256 нужен ключ длиной 32 байта.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники