HMACSHA256
Ключ и данные - массивы байтов.
Статический вызов -
HashData.
Без ключа -
SHA256.
Другой ключ даёт другой хеш.
Синтаксис
using HMACSHA256 hmac = new HMACSHA256(key);
byte[] hash = hmac.ComputeHash(data);
Пример
Давайте посчитать HMAC с ключом
12345 и данными
abcde:
using System;
using System.Security.Cryptography;
using System.Text;
class Program
{
static void Main()
{
byte[] key = Encoding.UTF8.GetBytes("12345");
byte[] data = Encoding.UTF8.GetBytes("abcde");
string res;
using (HMACSHA256 hmac = new HMACSHA256(key))
{
res = Convert.ToHexString(hmac.ComputeHash(data));
}
Console.WriteLine(res);
}
}
Результат выполнения кода:
F8F78E4C506669FDD116876D08ADF809ED7C33585078DCFD4E6FE863B7EA966A
Пример
Давайте сравнить HashData
и ComputeHash:
using System;
using System.Security.Cryptography;
using System.Text;
class Program
{
static void Main()
{
byte[] key = Encoding.UTF8.GetBytes("12345");
byte[] data = Encoding.UTF8.GetBytes("abcde");
byte[] fromStatic = HMACSHA256.HashData(key, data);
byte[] fromInstance;
using (HMACSHA256 hmac = new HMACSHA256(key))
{
fromInstance = hmac.ComputeHash(data);
}
bool res = Convert.ToHexString(fromStatic)
== Convert.ToHexString(fromInstance);
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте сравнить хеши для разных ключей:
using System;
using System.Security.Cryptography;
using System.Text;
class Program
{
static void Main()
{
byte[] data = Encoding.UTF8.GetBytes("abcde");
byte[] keyFirst = Encoding.UTF8.GetBytes("12345");
byte[] keySecond = Encoding.UTF8.GetBytes("67890");
byte[] hashFirst = HMACSHA256.HashData(keyFirst, data);
byte[] hashSecond = HMACSHA256.HashData(keySecond, data);
bool res = hashFirst.AsSpan().SequenceEqual(hashSecond);
Console.WriteLine(res);
}
}
Результат выполнения кода:
False
Смотрите также
-
HashData,
статический HMAC -
SHA256,
хеш без ключа -
SHA512,
SHA-512 -
IncrementalHash,
данные по кускам