public static String decrypt(final String cipherText, final String password) throws Exception {
        if (cipherText == null) {
            return null;
        }

        final byte[] decodedCipherText = Base64.getDecoder().decode(cipherText.getBytes(StandardCharsets.UTF_8));
        final ByteBuffer byteBuffer = ByteBuffer.wrap(decodedCipherText);

        // Extract the IV, salt and original cipher-text
        final byte[] iv = new byte[IV_LENGTH];
        byteBuffer.get(iv);
        final byte[] salt = new byte[SALT_LENGTH];
        byteBuffer.get(salt);
        final byte[] originalCipherText = new byte[byteBuffer.remaining()];
        byteBuffer.get(originalCipherText);

        // Reconstruct AES key using the password and salt
        final SecretKey aesKey = getAESKeyFromPassword(password, salt);

        final Cipher cipher = Cipher.getInstance(CRYPTO_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, aesKey, new GCMParameterSpec(TAG_LENGTH, iv));
        final byte[] plainText = cipher.doFinal(originalCipherText);

        return new String(plainText, StandardCharsets.UTF_8);
    }
Decrypt a base-64 encoded cipher-text string
@return Plain text
stroom-core-shared/src/main/java/stroom/crypto/shared/CryptoUtils.java