public string Protect(FormsAuthenticationCookie cookie)
        {
            if (cookie == null)
            {
                throw new ArgumentNullException(nameof(cookie));
            }

            var unprotectedData = ConvertToBytes(cookie);

            var cryptoProvider = AspNetCryptoServiceProvider.GetCryptoServiceProvider(_options);
            var cryptoService  = cryptoProvider.GetCryptoService();

            byte[] protectedData = cryptoService.Protect(unprotectedData);

            return(CryptoUtil.BinaryToHex(protectedData));
        }
        private byte[] ConvertToBytes(FormsAuthenticationCookie data)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            using (var ticketBlobStream = new MemoryStream())
                using (var ticketWriter = new SerializingBinaryWriter(ticketBlobStream))
                {
                    ticketWriter.Write((byte)1);
                    ticketWriter.Write((byte)1);
                    ticketWriter.Write(data.IssuedUtc.Ticks);
                    ticketWriter.Write((byte)0xfe);
                    ticketWriter.Write(data.ExpiresUtc.Ticks);
                    ticketWriter.Write(data.IsPersistent);
                    ticketWriter.WriteBinaryString(data.UserName ?? "");
                    ticketWriter.WriteBinaryString(data.UserData ?? "");
                    ticketWriter.WriteBinaryString(data.CookiePath ?? "");
                    ticketWriter.Write((byte)0xff);

                    return(ticketBlobStream.ToArray());
                }
        }