AES encripta con la herramienta de línea de comandos openssl y descifra en Java

Tengo un script de bash que usa la herramienta openssl para cifrar.

#!/bin/bash key128="1234567890123456" iv="1234567890123456" openssl enc -aes-128-cbc -in test -out test.enc -K $key128 -iv $iv 

Y código Java que intenta descifrar el archivo producido por el script.

 public class crypto { public static void main( String[] args ) { try { File f = new File("test.enc"); Cipher c; Key k; String secretString = "01020304050607080900010203040506"; String ivString = "01020304050607080900010203040506"; byte[] secret = hexStringToByteArray(secretString); byte[] iv = hexStringToByteArray(ivString); c = Cipher.getInstance("AES/CBC/PKCS5Padding"); k = new SecretKeySpec(secret, "AES"); c.init(Cipher.DECRYPT_MODE, k, new IvParameterSpec(iv)); CipherInputStream cis = new CipherInputStream(new FileInputStream(f), c); BufferedReader br = new BufferedReader(new InputStreamReader(cis)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); } catch (IOException e) { System.out.println(e.getMessage()); } catch (NoSuchAlgorithmException e) { System.out.println(e.getMessage()); } catch (NoSuchPaddingException e) { System.out.println(e.getMessage()); } catch (InvalidKeyException e) { System.out.println(e.getMessage()); } catch (InvalidAlgorithmParameterException e) { System.out.println(e.getMessage()); } } public static byte[] hexStringToByteArray(String s) { int len = s.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16)); } return data; } } 33,1 71% 

Cuando ejecuto el código Java, no imprime nada. ¿Hay una discrepancia entre el script y el código de Java?

Una pregunta secundaria es si puedo reescribir esto para usar la contraseña en lugar de la clave / iv. Para hacer eso, ¿hay alguna manera de saber qué iv utiliza openssl para una contraseña determinada?

Como @Polynomial mencionado anteriormente, las claves y los iv no coinciden entre el script bash y el código Java. Cambiar el script de bash a lo siguiente resuelve el problema.

 #!/bin/bash key128="01020304050607080900010203040506" iv="01020304050607080900010203040506" openssl enc -aes-128-cbc -in test -out test.enc -K $key128 -iv $iv 

Si openssl se ejecuta de la siguiente manera, usará una contraseña e imprimirá la clave y iv. Esa clave y iv pueden sustituirse en el progtwig Java anterior.

 openssl enc -nosalt -aes-128-cbc -in test -out test.enc -p