Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1388 of 1492 menu
◀ ▶

IncrementalHash

Создают через CreateHash с HashAlgorithmName. Куски передают в AppendData, результат берут из GetHashAndReset. После сброса расчёт начинается заново.

Синтаксис

using IncrementalHash hash = IncrementalHash.CreateHash(HashAlgorithmName.SHA256); hash.AppendData(part); byte[] result = hash.GetHashAndReset();

Пример

Давайте подать ab и cde и сравнить с SHA256.HashData:

using System; using System.Security.Cryptography; using System.Text; class Program { static void Main() { byte[] full = Encoding.UTF8.GetBytes("abcde"); byte[] part1 = Encoding.UTF8.GetBytes("ab"); byte[] part2 = Encoding.UTF8.GetBytes("cde"); using IncrementalHash hash = IncrementalHash.CreateHash( HashAlgorithmName.SHA256); hash.AppendData(part1); hash.AppendData(part2); byte[] fromParts = hash.GetHashAndReset(); byte[] fromFull = SHA256.HashData(full); bool res = fromParts.AsSpan().SequenceEqual(fromFull); Console.WriteLine(res); } }

Результат выполнения кода:

True

Пример

Давайте вывести hex того же пошагового хеша:

using System; using System.Security.Cryptography; using System.Text; class Program { static void Main() { byte[] part1 = Encoding.UTF8.GetBytes("ab"); byte[] part2 = Encoding.UTF8.GetBytes("cde"); string res; using (IncrementalHash hash = IncrementalHash.CreateHash( HashAlgorithmName.SHA256)) { hash.AppendData(part1); hash.AppendData(part2); res = Convert.ToHexString(hash.GetHashAndReset()); } Console.WriteLine(res); } }

Результат выполнения кода:

36BBE50ED96841D10443BCB670D6554F0A34B761BE67EC9C4A8AD2C0C44CA42C

Пример

Давайте после первого GetHashAndReset взять хеш пустых данных:

using System; using System.Security.Cryptography; using System.Text; class Program { static void Main() { byte[] part1 = Encoding.UTF8.GetBytes("ab"); byte[] part2 = Encoding.UTF8.GetBytes("cde"); using IncrementalHash hash = IncrementalHash.CreateHash( HashAlgorithmName.SHA256); hash.AppendData(part1); hash.AppendData(part2); hash.GetHashAndReset(); byte[] emptyStep = hash.GetHashAndReset(); byte[] emptyDirect = SHA256.HashData(Array.Empty<byte>()); bool res = emptyStep.AsSpan().SequenceEqual(emptyDirect); Console.WriteLine(res); } }

Результат выполнения кода:

True

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить