Нужна реализация HMAC-SHA1 для C# Micro Framework

Как следует из названия, я ищу реализацию HMAC-SHA1 для C#. Это будет работать в рамках микроструктуры, поэтому я не могу использовать встроенные классы System.Security.Cryptography.

У меня нет проблем с переносом библиотеки, если я могу понять исходный код. Я нашел источник для одного из них в Javascript и убедился, что он соответствует ожидаемым значениям, но у меня возникли проблемы с переносом, потому что я не всегда могу сказать, к какому типу относятся значения.

Итак, кто-нибудь знает о каких-либо реализациях C # (или Java (или других строго типизированных))?


person Hounshell    schedule 07.09.2011    source источник
comment
Вы проверили это? aarongifford.com/computers/sha.html. Кажется, это было сделано на «С».   -  person Charles Prakash Dasari    schedule 08.09.2011


Ответы (3)


Криптографическая библиотека Bouncycastle C# содержит свободно лицензированный исходный код C#. Извлечение классов Org.BouncyCastle.Crypto.Digests.Sha1Digest и Org.BouncyCastle.Crypto.Macs.HMac и включение их в код должно быть тривиальным. Похоже, что это не зависит от этих классов .NET, но я не знаю, какие классы включены в микроструктуру.

person President James K. Polk    schedule 08.09.2011
comment
Это работает, его относительно легко разобрать с минимальным количеством вспомогательных классов, и оно соответствует моим эталонным примерам. Спасибо. - person Hounshell; 08.09.2011

Вы можете получить версию C# с тем же API, что и Microsoft, используя код, предоставленный проектом Mono. Он имеет лицензию MIT X11, поэтому его легко использовать в любом проекте. Видеть:

https://github.com/mono/mono/blob/master/mcs/class/corlib/System.Security.Cryptography/HMACSHA1.cs

https://github.com/mono/mono/blob/master/mcs/class/corlib/System.Security.Cryptography/HMAC.cs

и связанные файлы. Существуют также модульные тесты, которые вы можете использовать, чтобы убедиться, что он работает правильно на вашей платформе.

person poupou    schedule 08.09.2011

sphlib – это библиотека с открытым исходным кодом, включающая оптимизированный код для многих хеш-функций, включая SHA-1, на языке C и Ява. Версия для Java также включает общую реализацию HMAC (пригодную для использования с любой из реализованных хеш-функций). Поскольку код представляет собой базовый код Java с только элементарными целочисленными операциями (он должен был работать и на платформах J2ME), его перевод на C# должен быть простым (вам просто нужно заменить беззнаковый оператор сдвига вправо '>>>' в Java на привести к соответствующему беззнаковому типу C#, а затем выполнить обычный сдвиг вправо).

person Thomas Pornin    schedule 08.09.2011