就像标题所说,我正在为C#寻找HMAC-SHA1实现。这将在微框架下运行,因此我无法使用内置的System.Security.Cryptography类。
如果我能理解原始代码,移植库没有问题。我在Javascript中找到了一个源代码,并验证它与预期值匹配,但我无法移植,因为我不能总是告诉它们的值是什么类型。
所以有人知道任何C#(或Java(或其他强类型))实现吗?
答案 0 :(得分:4)
Bouncycastle C#crypto库包含自由许可的C#源代码。提取Org.BouncyCastle.Crypto.Digests.Sha1Digest
和Org.BouncyCastle.Crypto.Macs.HMac
类并将它们合并到您的代码中应该是微不足道的。它似乎没有依赖于那些.NET类,但我不知道微框架中包含哪些类。
答案 1 :(得分:1)
通过使用Mono项目提供的代码,您可以使用与Microsoft相同的API的C#版本。它的 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
和相关文件。您还可以使用单元测试来确保它在您的平台上正常运行。
答案 2 :(得分:0)
sphlib是一个开源库,它包含许多散列函数的优化代码,包括C和Java中的SHA-1。 Java版本还包括通用HMAC实现(可与任何实现的散列函数一起使用)。由于代码是基本的Java,只有基本的整数运算(它本来也可以在J2ME平台上运行),所以将它转换为C#应该很容易(你只需要改变Java的'>>>
'无符号权限将操作符转换为相应的C#无符号类型,然后进行常规右移。)