code: @Override
      public String decryptAESWithCBC(String value, String privateKey, String salt, String iv) {
          SecretKey key = generateAESKey(privateKey, salt);
          byte[] decrypted = doFinal(Cipher.DECRYPT_MODE, key, iv, decodeBase64(value));
          return new String(decrypted, UTF_8);
      }
docs: Decrypt a String with the AES encryption advanced using 'AES/CBC/PKCS5Padding'. Unlike the regular
  encode/decode AES method using ECB (Electronic Codebook), it uses Cipher-block chaining (CBC). The private key
  must have a length of 16 bytes, the salt and initialization vector must be valid hexadecimal Strings.
  
  @param value      An encrypted String encoded using Base64.
  @param privateKey The private key
  @param salt       The salt (hexadecimal String)
  @param iv         The initialization vector (hexadecimal String)
  @return The decrypted String