Вычисляю HMAC SHA1, алгоритм следующий:
public static string Encode(string input, string key)
{
var byteArray = Encoding.ASCII.GetBytes(input);
using (var hmacsha1 = new HMACSHA1(Encoding.ASCII.GetBytes(key)))
{
using (var stream = new MemoryStream(byteArray))
{
return hmacsha1.ComputeHash(stream).Aggregate("", (s, e) => s + String.Format("{0:X2}", e), s => s);
}
}
}
Хэш считается, но если в сообщении присутствуют символы \" (например объектов сериализованных в json) то хэш вычисляется неправильно. Как можно решить данную проблему?
Пример вычисления хэшей: Сообщение hello, ключ hello. Мой код выдает результат 9ADE18F3E0EE81A5343F4A005F795DBAF9CEEFD8, код какого нибудь онлайн сервиса выдает точно такой же хэш. Сообщение hello\", ключ hello. Мой код выдает 89E81E2037598EFAB46FF882661EECD3FF409D73 Какой нибудь онлайн сервис c24001586dffaa049e74893babf11625995bd570
Вот это HMAC от строки hello", которая в c# записывается так "hello\"":
89e81e2037598efab46ff882661eecd3ff409d73
А это HMAC от строки hello\", которая в c# записывается так "hello\\\"":
c24001586dffaa049e74893babf11625995bd570
Онлайн сервисы воспринимают строку в чистом виде, не обрабатывая экранирующие символы.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости