public void HashesEmptyBuffer()
        {
            // Arrange
            using (var target = new MD5IncrementalHash())
            {
                // Act
                target.AppendData(Empty, 0, 0);
                var actual = target.GetHashAndReset();

                // Assert
                Assert.Equal(HashOfEmpty, actual);
            }
        }
        public void ProducesKnownHash()
        {
            // Arrange
            using (var target = new MD5IncrementalHash())
            {
                // Act
                target.AppendData(Foobar, 0, Foobar.Length);
                var actual = target.GetHashAndReset();

                // Assert
                Assert.Equal(HashOfFoobar, actual);
            }
        }
        public void ResetAllowsReuse()
        {
            // Arrange
            using (var target = new MD5IncrementalHash())
            {
                var firstInput = Encoding.ASCII.GetBytes("ignored");                

                // Act
                target.AppendData(firstInput, 0, firstInput.Length);
                target.GetHashAndReset();
                target.AppendData(Foobar, 0, Foobar.Length);
                var actual = target.GetHashAndReset();

                // Assert
                Assert.Equal(HashOfFoobar, actual);
            }
        }
        public void HashesPartOfTheProvidedBuffer()
        {
            // Arrange
            using (var target = new MD5IncrementalHash())
            {
                var expected = new byte[] // MD5 hash of "ooba"
                {
                    0xdb, 0xec, 0xe8, 0x01, 0xac, 0xcd, 0x4d, 0xb2,
                    0xed, 0x8c, 0x1c, 0x86, 0x3f, 0x5a, 0xad, 0x92
                };

                // Act
                target.AppendData(Foobar, 1, 4);
                var actual = target.GetHashAndReset();

                // Assert
                Assert.Equal(expected, actual);
            }
        }
        public void CanBeRepeatedlyResetWithTheSameResut()
        {
            // Arrange
            using (var target = new MD5IncrementalHash())
            {
                // Act
                var first = target.GetHashAndReset();
                var second = target.GetHashAndReset();
                var third = target.GetHashAndReset();

                // Assert
                Assert.Equal(HashOfEmpty, first);
                Assert.Equal(HashOfEmpty, second);
                Assert.Equal(HashOfEmpty, third);
            }
        }
예제 #6
0
        public static async Task<string> GetStreamContentMD5(Stream stream)
        {
            using (var md5 = new MD5IncrementalHash())
            {
                var buffer = new byte[8192];
                var read = buffer.Length;
                while (read > 0)
                {
                    read = await stream.ReadAsync(buffer, 0, buffer.Length);
                    md5.AppendData(buffer, 0, read);
                }

                var hashBytes = md5.GetHashAndReset();
                var hashBase64 = Convert.ToBase64String(hashBytes);

                return hashBase64;
            }
        }