Usando o Java para descriptografar o openssl aes-256-cbc usando a chave fornecida e iv

Eu tenho procurado por um exemplo de código Java para fazer o seguinte, mas foram mal sucedidos. Estou procurando uma solução para minha situação particular.

Uma chave e IV foram gerados usando “testtest” para uma senha:

openssl enc -aes-256-cbc -P salt=2855243412E30BD7 key=E4A38479A2349177EAE6038A018483318350E7F5430BDC8F82F1974715CB54E5 iv=629E2E1500B6BA687A385D410D5B08E3 

Um arquivo (texto nomeado) foi criptografado no Linux usando o comando openssl:

 openssl enc -aes-256-cbc -K E4A38479A2349177EAE6038A018483318350E7F5430BDC8F82F1974715CB54E5 -iv 629E2E1500B6BA687A385D410D5B08E3 -e -in text -out text_ENCRYPTED 

Pode ser decifrado com sucesso usando:

 openssl enc -aes-256-cbc -K E4A38479A2349177EAE6038A018483318350E7F5430BDC8F82F1974715CB54E5 -iv 629E2E1500B6BA687A385D410D5B08E3 -d -in text_ENCRYPTED -out text_DECRYPTED 

Eu tenho access ao arquivo criptografado, o sal, a chave e o iv. Eu não acredito que vou receber a senha. Além disso, instalei a política JCE de força ilimitada. Até agora eu encontrei apenas exemplos em que outro programa java faz a criptografia e gera esses parâmetros. Para o meu caso, devo usar os valores salt, key e iv dados para descriptografar um arquivo. Isso é possível com o Java? Por favor, lembre-se que eu estou vinculado a esta configuração, muito obrigado pelo seu tempo e ajuda.

Você deveria usar algo assim:

 InputStream cipherInputStream = null; try { final StringBuilder output = new StringBuilder(); final byte[] secretKey = javax.xml.bind.DatatypeConverter.parseHexBinary("E4A38479A2349177EAE6038A018483318350E7F5430BDC8F82F1974715CB54E5"); final byte[] initVector = javax.xml.bind.DatatypeConverter.parseHexBinary("629E2E1500B6BA687A385D410D5B08E3"); final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(secretKey, "AES"), new IvParameterSpec(initVector, 0, cipher.getBlockSize())); cipherInputStream = new CipherInputStream(new FileInputStream("text_ENCRYPTED"), cipher); final String charsetName = "UTF-8"; final byte[] buffer = new byte[8192]; int read = cipherInputStream.read(buffer); while (read > -1) { output.append(new String(buffer, 0, read, charsetName)); read = cipherInputStream.read(buffer); } System.out.println(output); } finally { if (cipherInputStream != null) { cipherInputStream.close(); } }