public String encrypt(String plainTextStr) {
        final byte[] cipherTextBytes;
        final Cipher cipher;
        final SecretKeySpec SKSAESKey;
        final int blockSize;
        final byte[] ivBytes;
        final SecureRandom random;
        final IvParameterSpec iv;
        final byte[] ivWithCipherTextBytes;
        final byte[] plainTextBytes = plainTextStr.getBytes(UTF8Charset);
        final String cipherTextBase64Str;

        // TODO clean correct/cleanup try/catch
        try {
            cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            SKSAESKey = new SecretKeySpec(AESKey, "AES");
            
            blockSize = cipher.getBlockSize();
            ivBytes = new byte[blockSize];
            
            random = SecureRandom.getInstance("SHA1PRNG");
            random.nextBytes(ivBytes);
            iv = new IvParameterSpec(ivBytes);
            
            cipher.init(Cipher.ENCRYPT_MODE, SKSAESKey, iv);
            
            cipherTextBytes = cipher.doFinal(plainTextBytes);
            ivWithCipherTextBytes = new byte[ivBytes.length + cipherTextBytes.length];
            
            System.arraycopy(ivBytes, 0, ivWithCipherTextBytes, 0, blockSize);
            System.arraycopy(cipherTextBytes,
                    0,
                    ivWithCipherTextBytes,
                    blockSize,
                    cipherTextBytes.length);
            
            cipherTextBase64Str = DatatypeConverter.printBase64Binary(ivWithCipherTextBytes);
            
            return cipherTextBase64Str;
            
        } catch (InvalidKeyException e) {
            System.out.println("Bad pass phrase: " + e);
            return null;
        } catch (GeneralSecurityException e) {
            System.out.println("Error while encrypting: " + e);
            return null;
        }
    }