Проблема при вычислении хэша

174
21 мая 2018, 14:40

Вычисляю 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

Answer 1

Вот это HMAC от строки hello", которая в c# записывается так "hello\"":

89e81e2037598efab46ff882661eecd3ff409d73

А это HMAC от строки hello\", которая в c# записывается так "hello\\\"":

c24001586dffaa049e74893babf11625995bd570

Онлайн сервисы воспринимают строку в чистом виде, не обрабатывая экранирующие символы.

READ ALSO
C# WPF дизайн для локализации

C# WPF дизайн для локализации

Как контролировать изменение дизайна при изменении длины слов? На некоторых языках слова очень длинные в переводе, как сохранить дизайн...

214
HEX ключ в .pem файл

HEX ключ в .pem файл

У меня есть закрытый и открытые тестовые ключи в виде массивов байт(ну или HEX строки, без разницы)Хочу на тестовых ключах проверить правильность...

189
Актуальность книг по старым версиям C#

Актуальность книг по старым версиям C#

Сейчас хочу начать изучение C#, прошелся по списку из этого ответа Книги и учебные ресурсы по C#

193