public void ComputeHashOnMultiBufferStream()
        {
            var firstArray  = Encoding.ASCII.GetBytes("this is good");
            var secondArray = Encoding.ASCII.GetBytes("this is bad");

            using (var stream = new MultiBufferStream()) {
                stream.AddBuffer(firstArray);
                stream.AddBuffer(secondArray);

                using (var sha256Hash = new SHA256Managed()) {
                    var hash = sha256Hash.ComputeHash(stream);

                    var hashString = HashToString(hash);

                    //Хеш для строки 'this is goodthis is bad', вычисленный с помощью внешней программы
                    var verifyHash = "B61A0664186896AF7D947E6A56DEB8D608FDF092E515DB531834FDE7DBFCAF79";
                    Assert.That(hashString, Is.EqualTo(verifyHash).IgnoreCase);

                    hashString = Convert.ToBase64String(hash);

                    var allStringHash = Convert.ToBase64String(sha256Hash.ComputeHash(Encoding.ASCII.GetBytes("this is goodthis is bad")));
                    Assert.That(hashString, Is.EqualTo(allStringHash).IgnoreCase);
                }
            }
        }
예제 #2
0
        public static string GetSHA256Hash(this Mime mime)
        {
            using (var stream = new MultiBufferStream()) {
                if (!String.IsNullOrWhiteSpace(mime.MainEntity.Subject))
                {
                    stream.AddBuffer(Encoding.ASCII.GetBytes(mime.MainEntity.Subject));
                }
                if (!String.IsNullOrWhiteSpace(mime.BodyText))
                {
                    stream.AddBuffer(Encoding.ASCII.GetBytes(mime.BodyText));
                }
                if (String.IsNullOrWhiteSpace(mime.BodyText) && !String.IsNullOrWhiteSpace(mime.BodyHtml))
                {
                    var convertedHtml = mime.HtmlToText();
                    if (!String.IsNullOrWhiteSpace(convertedHtml))
                    {
                        stream.AddBuffer(Encoding.ASCII.GetBytes(convertedHtml));
                    }
                }

                var attachments = mime.GetValidAttachements().OrderBy(m => m.GetFilename());

                foreach (var attachment in attachments)
                {
                    stream.AddBuffer(attachment.Data);
                }

                if (stream.Length > 0)
                {
                    using (var sha256Hash = new SHA256Managed()) {
                        var hash = sha256Hash.ComputeHash(stream);

                        return(Convert.ToBase64String(hash));
                    }
                }

                return(String.Empty);
            }
        }