У меня есть кромка. Я строю код, который читает двоичные файлы данных, созданные коммерческим инструментом с закрытым исходным кодом. Информация о формате данных указана в документе.HMACSHA1 определен для сообщений нулевой длины?
Для проверки целостности данных спецификация поставщика запрашивает HMAC на основе SHA1, используя ключ, полученный из пароля в соответствии с RFC2898. Многие среды программирования имеют класс HMACSHA1 для создания этих хэшей.
Для потоков данных с ненулевой длиной я могу успешно вычислить хэш, и расчет в моем коде согласуется с реализацией поставщика. Другими словами, мой код может читать и аутентифицировать файлы, написанные продавцом, и наоборот.
Однако, когда длина потока данных равна нулю, инструмент поставщика испускает хэш, который НЕ все нули. Я не знаю, откуда оно взялось, если нет сообщения для запуска через HMACSHA1.
Для HMACSHA1 или для любого HMAC - это MAC, определенный для краевого случая «нулевого сообщения»?
Я использую .NET и класс System.Security.Cryptography.HMACSHA1, хотя я считаю, что мой вопрос носит платформо-агностик.
Существует одна платформа конкретного бита: Когда я пытаюсь получить свойство Hash на экземпляр этого типа, если я не запускать любые данные через экземпляр, я получаю
Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at System.Security.Cryptography.HashAlgorithm.get_Hash()
Для меня это не удивительно, поскольку хэш не имеет ничего общего.
Подсвечники:
Это означает, что HMACSHA1 определен для сообщения нулевой длины, но не для неопределенного (нулевого) сообщения.Как и ожидалось. –