@spec decrypt(binary(), any(), binary()) :: {:ok, binary()} | {:error, String.t()}
@spec encrypt(String.t(), String.t(), String.t()) :: binary() | {:error, String.t()}