Нужна реализация HMAC-SHA1 для C # Micro Framework - PullRequest
4 голосов
/ 08 сентября 2011

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

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

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

Ответы [ 3 ]

4 голосов
/ 08 сентября 2011

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

1 голос
/ 08 сентября 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

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

0 голосов
/ 08 сентября 2011

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

...