docs: public String decrypt(String encrypted, String password) {
  
          // Basic null/empty check.
          // An empty string can be encrypted, but not decrypted:
          if (StringUtils.isEmpty(encrypted)) {
              return encrypted;
          }
  
          Cipher cipher = getCipher();
  
          // Convert to a byte array:
          byte[] bytes = ByteArray.fromBase64(encrypted);
  
          // Validate the size of the encrypted data:
          if (bytes.length < Generate.SALT_BYTES + getIvSize(cipher)) {
              throw new IllegalArgumentException("Are you sure this is encrypted data? Byte length (" + bytes.length
                      + ") is shorter than a salt plus initialisation vector value.");
          }
  
          // Separate the salt and initialisation vector from the data:
          byte[] salt = ArrayUtils.subarray(bytes, 0, Generate.SALT_BYTES);
          byte[] iv = ArrayUtils.subarray(bytes, Generate.SALT_BYTES, Generate.SALT_BYTES + getIvSize(cipher));
          byte[] data = ArrayUtils.subarray(bytes, Generate.SALT_BYTES + getIvSize(cipher), bytes.length);
  
          // Generate the encryption key:
          SecretKey key = Keys.generateSecretKey(password, ByteArray.toBase64(salt));
  
          // Decrypt the data:
          byte[] result = decrypt(iv, data, key, cipher);
  
          // Return as a String:
          return ByteArray.toString(result);
      }