code: @Override
      public String encryptAESWithCBC(String value, String privateKey, String salt, String iv) {
          SecretKey genKey = generateAESKey(privateKey, salt);
          byte[] encrypted = doFinal(Cipher.ENCRYPT_MODE, genKey, iv, value.getBytes(UTF_8));
          return encodeBase64(encrypted);
      }
docs: Encrypt 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 hex Strings.
  
  @param value      The message to encrypt
  @param privateKey The private key
  @param salt       The salt (hexadecimal String)
  @param iv         The initialization vector (hexadecimal String)
  @return encrypted String encoded using Base64