AES 256 CBC + Java

Boa noite pessoal, estou testando AES 256 CBC. Segue meu source:

public void testarMODOCBC() throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException {
        String dado_original = "O Vetor de Inicialização ou Initialization Vector, em inglês";
        KeyGenerator kg = KeyGenerator.getInstance("AES");
        Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
        Key key = kg.generateKey();
        c.init(Cipher.ENCRYPT_MODE, key);
        byte input[] = dado_original.getBytes();
        byte criptografado[] = c.doFinal(input);
        System.out.println(asHex(criptografado));
        byte iv[] = c.getIV();
        IvParameterSpec dps = new IvParameterSpec(iv);
        c.init(Cipher.DECRYPT_MODE, key, dps);
        byte output[] = c.doFinal(criptografado);
        System.out.println(new String(output));
    }
Eu estava precisando dos seguintes:
  1. Que a chave seja gerada através do processo Password Based Key Derivation Function (PBKDF) utilizando SHA256.

  2. Que os valores dos vetor de inicialização(IV) sejam setados por mim.

  3. Que os valores retornados na string gerada do vetor “output” respeitasse os acentos e caracteres especiais da mensagem original.

    Alguém pode me dar algumas informações neste sentido para eu continuar com a implementação? Desde já agradeço todas as respostas.