InvalidKeyException java.security.InvalidKeyException: ningún proveedor instalado admite esta clave: (nulo)

Tengo dos clases, una es la clase principal y otra es la implementación de AES.

Sin embargo, en mi clase AES tengo un método para descifrar una cadena, pero cada vez que la ejecuto, da una excepción

Mi método de cifrado funciona bien pero mi método de descifrado no funciona como se esperaba.

El código

private Cipher aesCipherForDecryption;
String strDecryptedText = new String();

public String decryptAES(final String ciphertext) {

    try {

        aesCipherForDecryption = Cipher.getInstance("AES/CBC/PKCS5PADDING");
        aesCipherForDecryption.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iV));
        byte[] byteDecryptedText = aesCipherForDecryption.doFinal(byteCipherText);
        strDecryptedText = new String(byteDecryptedText);

    } catch (IllegalBlockSizeException e) {
        System.out.print("IllegalBlockSizeException " +e);
    } catch (BadPaddingException e) {
        System.out.print("BadPaddingException "+e);
    } catch (NoSuchAlgorithmException e) {
        System.out.print("NoSuchAlgorithmException "+ e);
    } catch (NoSuchPaddingException e) {
        System.out.print("NoSuchPaddingException "+e);
    } catch (InvalidKeyException e) {
        System.out.print("InvalidKeyException "+e);
    } catch (InvalidAlgorithmParameterException e) {
        System.out.print("InvalidAlgorithmParameterException "+e);
    }

    System.out.println("\nDecrypted Text message is " + strDecryptedText);
    return strDecryptedText;
}

El error que genera este método es

InvalidKeyException java.security.InvalidKeyException: ningún proveedor instalado admite esta clave: (nulo)

ACTUALIZACIÓN # 1:

Así que he actualizado el código de la siguiente manera

public String decryptAES(byte[] ciphertext) {
    String strDecryptedText = new String();
        try {
            byte[] byteDecryptedText = aesCipherForDecryption.doFinal(ciphertext);

            strDecryptedText = new String(byteDecryptedText);

        } catch (IllegalBlockSizeException e) {
            System.out.print("IllegalBlockSizeException "+e);
            e.printStackTrace();
        } catch (BadPaddingException e) {
            System.out.print("BadPaddingException "+e);
            e.printStackTrace();
        }

    System.out.println("\nDecrypted Text message is " + strDecryptedText);
    return strDecryptedText;
}    

y en la clase principal tengo esta línea

byte [] byteciphertext = ciphertext.getBytes();

solo para convertir la cadena a bytes

¿es correcto? sigo teniendo

IllegalBlockSizeException javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipherjavax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher

¿Podría alguien ayudarme a solucionar este problema?

Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta