Traducir el código de cifrado de Ruby a Java

Tengo un código heredado en ruby ​​que realiza el cifrado mediante OpenSSL
Sin embargo, me gustaría traducir esto en Java y estoy perdido. Hasta ahora mi bloqueador más grande está descubriendo cómo generar el IV basado en este código. Cualquier ayuda sería apreciada grandemente

    def func_enc(data, key)
        cipher = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
        cipher.encrypt
        cipher.pkcs5_keyivgen(key)
        cipher.update(data)
        encrypted_data << cipher.final
        return encryptedData
    end

EDITAR
Solo para aclarar, me gustaría usar Java Crypto para esto. Este es el código que se me ocurrió hasta ahora:

    SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithMD5And256AES-CBC");
    KeySpec spec = new PBEKeySpec("Password".toCharArray(), null, 2048, 256);
    SecretKey tmp = factory.generateSecret(spec);
    SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, secret);
    AlgorithmParameters params = cipher.getParameters();
    byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();

pero"PBKDF2WithMD5And256AES-CBC" no tiene ningún proveedor y obtengo la excepción NoSuchAlgorithm.

    java.security.NoSuchAlgorithmException: PBKDF2WithMD5And256AES-CBC SecretKeyFactory not available

También la sal quepkcs5_keyivgen Usos por defecto es nulo !! No estoy seguro de si Java me permite usar un salt nulo.

¿Cómo puedo generar el IV correcto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta