Моя реализация C# HMAC-SHA256 соответствует только одному онлайн-калькулятору — все остальные дают разные результаты.C#

Место общения программистов C#
Ответить
Anonymous
 Моя реализация C# HMAC-SHA256 соответствует только одному онлайн-калькулятору — все остальные дают разные результаты.

Сообщение Anonymous »

Я работаю над проверкой подписи HMAC-SHA256 на C# и столкнулся с чем-то странным. Когда я тестирую свой код на разных онлайн-калькуляторах HMAC, я получаю противоречивые результаты. Моя реализация соответствует одному калькулятору (freeformatter.com), но несколько других популярных калькуляторов используют совершенно другой хэш. Я пытаюсь выяснить, есть ли в моем коде ошибка или эти калькуляторы делают что-то по-другому.
Моя реализация на C#:

Код: Выделить всё

private static string CalculateHMACSHA256(string message, string key)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
byte[] inputBytes = Encoding.UTF8.GetBytes(message);

using var hmac = new HMACSHA256(keyBytes);
byte[] hashBytes = hmac.ComputeHash(inputBytes);

return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
}
Тестовый пример 1: форматированный JSON
Ввод:

Код: Выделить всё

{
"test": "test"
}
  • Секретный ключ: 123
  • Алгоритм: HMAC-SHA256
  • Формат вывода: Шестнадцатеричный нижний регистр
Результаты
Мой код C# дает мне:

Код: Выделить всё

415aa87815342a5b0505fe1c35a9afb0d58ef5ba9c74feaffdcee9c94591a4a7
Соответствует этому калькулятору: Но все эти калькуляторы выдают разный хэш:

Код: Выделить всё

46067ae650494e0cb06f9170eabf1eca9b0bf29479142d675508eecedd239668
Так что либо моя реализация (и freeformatter.com) неверны, либо эти четыре калькулятора каким-то образом обрабатывают входные данные по-разному.
Контекст. Я создаю API ASP.NET Core, которому необходимо проверять подписи HMAC от стороннего клиента, но подписи не совпадают. Мне нужно знать, правильно ли мой код C# рассчитывает HMAC-SHA256.
Тестовый пример 2: минимизированный JSON
И вот здесь становится интересно. Когда я вместо этого использую минифицированный JSON:
  • Ввод: {"test":"test"
  • Секретный ключ: 123
На этот раз все калькуляторы выдают одно и то же. результат:

Код: Выделить всё

158a14842ce68aa9fbf72ebe487f14637f2e18d7d7b4ae8ab383c12904def981
Что здесь происходит? Любая информация будет очень полезна.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ator-all-o
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»