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
Смотрите также
-
SHA256.HashData,
хеш целиком -
SHA256,
класс SHA-256 -
SHA512,
SHA-512 -
HMACSHA256,
HMAC